kwartz 3.1.2 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +444 -0
- data/README.txt +4 -1
- data/bin/kwartz +2 -2
- data/doc-api/classes/Kwartz.html +16 -7
- data/doc-api/classes/Kwartz/Assertion.html +6 -6
- data/doc-api/classes/Kwartz/AssertionError.html +6 -6
- data/doc-api/classes/Kwartz/AttrInfo.html +71 -61
- data/doc-api/classes/Kwartz/BaseError.html +12 -12
- data/doc-api/classes/Kwartz/BaseTranslator.html +104 -74
- data/doc-api/classes/Kwartz/CharacterType.html +24 -24
- data/doc-api/classes/Kwartz/CommandOptionError.html +7 -7
- data/doc-api/classes/Kwartz/CommandOptions.html +50 -50
- data/doc-api/classes/Kwartz/Config.html +5 -0
- data/doc-api/classes/Kwartz/ConvertError.html +12 -12
- data/doc-api/classes/Kwartz/Converter.html +31 -33
- data/doc-api/classes/Kwartz/CssStyleParser.html +207 -168
- data/doc-api/classes/Kwartz/Defun.html +32 -31
- data/doc-api/classes/Kwartz/{HandlerArgument.html → Directive.html} +27 -53
- data/doc-api/classes/Kwartz/ElementInfo.html +68 -53
- data/doc-api/classes/Kwartz/EperlExpressionParser.html +185 -0
- data/doc-api/classes/Kwartz/EperlHandler.html +65 -58
- data/doc-api/classes/Kwartz/EperlTranslator.html +14 -7
- data/doc-api/classes/Kwartz/ErubisTranslator.html +14 -7
- data/doc-api/classes/Kwartz/ErubyTranslator.html +14 -7
- data/doc-api/classes/Kwartz/ExpandStatement.html +20 -20
- data/doc-api/classes/Kwartz/Expander.html +358 -0
- data/doc-api/classes/Kwartz/Handler.html +287 -157
- data/doc-api/classes/Kwartz/{StatementHelper.html → HandlerHelper.html} +307 -112
- data/doc-api/classes/Kwartz/Helper/ActionViewHelper.html +23 -23
- data/doc-api/classes/Kwartz/Helper/RailsTemplate.html +96 -96
- data/doc-api/classes/Kwartz/JstlExpressionParser.html +181 -0
- data/doc-api/classes/Kwartz/JstlHandler.html +134 -126
- data/doc-api/classes/Kwartz/JstlTranslator.html +21 -14
- data/doc-api/classes/Kwartz/KwartzError.html +6 -6
- data/doc-api/classes/Kwartz/Main.html +4 -4
- data/doc-api/classes/Kwartz/NativeExpression.html +19 -19
- data/doc-api/classes/Kwartz/NativeStatement.html +24 -24
- data/doc-api/classes/Kwartz/Node.html +7 -7
- data/doc-api/classes/Kwartz/PIErubisTranslator.html +21 -14
- data/doc-api/classes/Kwartz/ParseError.html +6 -6
- data/doc-api/classes/Kwartz/PerlExpressionParser.html +185 -0
- data/doc-api/classes/Kwartz/PerlHandler.html +353 -0
- data/doc-api/classes/Kwartz/PerlTranslator.html +226 -0
- data/doc-api/classes/Kwartz/PhpExpressionParser.html +185 -0
- data/doc-api/classes/Kwartz/PhpHandler.html +63 -56
- data/doc-api/classes/Kwartz/PhpTranslator.html +21 -14
- data/doc-api/classes/Kwartz/PresentationLogicParser.html +126 -123
- data/doc-api/classes/Kwartz/PrintStatement.html +18 -18
- data/doc-api/classes/Kwartz/RailsHandler.html +84 -85
- data/doc-api/classes/Kwartz/RailsTranslator.html +13 -6
- data/doc-api/classes/Kwartz/RubyExpressionParser.html +180 -0
- data/doc-api/classes/Kwartz/RubyHandler.html +73 -69
- data/doc-api/classes/Kwartz/RubyStyleParser.html +86 -86
- data/doc-api/classes/Kwartz/RubyTranslator.html +28 -21
- data/doc-api/classes/Kwartz/Ruleset.html +622 -1
- data/doc-api/classes/Kwartz/StrutsTranslator.html +14 -14
- data/doc-api/classes/Kwartz/TagInfo.html +52 -27
- data/doc-api/classes/Kwartz/TextConverter.html +75 -37
- data/doc-api/classes/Kwartz/Translator.html +54 -53
- data/doc-api/classes/Kwartz/Util.html +25 -25
- data/doc-api/created.rid +1 -1
- data/doc-api/files/__/README_txt.html +7 -2
- data/doc-api/files/kwartz/assert_rb.html +2 -2
- data/doc-api/files/kwartz/binding/eperl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/erubis_rb.html +2 -2
- data/doc-api/files/kwartz/binding/eruby_rb.html +2 -2
- data/doc-api/files/kwartz/binding/jstl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/perl_rb.html +115 -0
- data/doc-api/files/kwartz/binding/php_rb.html +2 -2
- data/doc-api/files/kwartz/binding/pierubis_rb.html +2 -2
- data/doc-api/files/kwartz/binding/rails_rb.html +2 -2
- data/doc-api/files/kwartz/binding/ruby_rb.html +2 -2
- data/doc-api/files/kwartz/binding/struts_rb.html +2 -2
- data/doc-api/files/kwartz/config_rb.html +2 -2
- data/doc-api/files/kwartz/converter_rb.html +2 -2
- data/doc-api/files/kwartz/defun_rb.html +2 -2
- data/doc-api/files/kwartz/error_rb.html +2 -2
- data/doc-api/files/kwartz/helper/rails_rb.html +2 -2
- data/doc-api/files/kwartz/main_rb.html +3 -2
- data/doc-api/files/kwartz/node_rb.html +2 -2
- data/doc-api/files/kwartz/parser_rb.html +2 -2
- data/doc-api/files/kwartz/translator_rb.html +2 -2
- data/doc-api/files/kwartz/util/assert-text-equal_rb.html +2 -2
- data/doc-api/files/kwartz/util/testcase-helper_rb.html +2 -2
- data/doc-api/files/kwartz/util_rb.html +2 -2
- data/doc-api/files/kwartz_rb.html +2 -2
- data/doc-api/fr_class_index.html +10 -5
- data/doc-api/fr_file_index.html +1 -0
- data/doc-api/fr_method_index.html +268 -239
- data/doc/docstyle.css +9 -3
- data/doc/img/fig05.png +0 -0
- data/doc/introduction-to-kwartz.html +3040 -0
- data/doc/pattern-catalog.html +5 -3
- data/doc/reference.html +680 -26
- data/doc/users-guide.html +222 -67
- data/kwartz.gemspec +4 -4
- data/lib/kwartz.rb +3 -3
- data/lib/kwartz/assert.rb +2 -2
- data/lib/kwartz/binding/eperl.rb +71 -31
- data/lib/kwartz/binding/erubis.rb +3 -2
- data/lib/kwartz/binding/eruby.rb +3 -2
- data/lib/kwartz/binding/jstl.rb +66 -29
- data/lib/kwartz/binding/perl.rb +230 -0
- data/lib/kwartz/binding/php.rb +69 -29
- data/lib/kwartz/binding/pierubis.rb +3 -2
- data/lib/kwartz/binding/rails.rb +18 -18
- data/lib/kwartz/binding/ruby.rb +74 -42
- data/lib/kwartz/binding/struts.rb +22 -21
- data/lib/kwartz/config.rb +4 -4
- data/lib/kwartz/converter.rb +465 -345
- data/lib/kwartz/defun.rb +2 -2
- data/lib/kwartz/error.rb +2 -2
- data/lib/kwartz/helper/rails.rb +2 -2
- data/lib/kwartz/main.rb +5 -4
- data/lib/kwartz/node.rb +92 -144
- data/lib/kwartz/parser.rb +112 -103
- data/lib/kwartz/translator.rb +14 -6
- data/lib/kwartz/util.rb +2 -2
- data/lib/kwartz/util/assert-text-equal.rb +2 -2
- data/lib/kwartz/util/testcase-helper.rb +1 -1
- data/test/test-compile.rb +2 -2
- data/test/test-compile.yaml +81 -0
- data/test/test-converter.rb +4 -8
- data/test/test-converter.yaml +152 -3
- data/test/test-directives.rb +2 -2
- data/test/test-directives.yaml +222 -0
- data/test/test-main.rb +6 -4
- data/test/test-main.yaml +66 -1
- data/test/test-parser.rb +12 -3
- data/test/test-parser.yaml +64 -51
- data/test/test-rails.rb +2 -2
- data/test/test-ruleset.rb +2 -2
- data/test/test-ruleset.yaml +465 -4
- data/test/test.log +6 -0
- data/test/test.rb +2 -2
- metadata +116 -106
- data/ChangeLog +0 -156
- data/doc-api/classes/Kwartz/DocumentRuleset.html +0 -369
- data/doc-api/classes/Kwartz/ElementExpander.html +0 -325
- data/doc-api/classes/Kwartz/ElementRuleset.html +0 -612
data/test/test-main.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Rev
|
3
|
-
### $Release: 3.
|
2
|
+
### $Rev$
|
3
|
+
### $Release: 3.2.0 $
|
4
4
|
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
5
|
###
|
6
6
|
|
@@ -21,7 +21,9 @@ YAML_DATA = ydoc['yamldata']
|
|
21
21
|
YAML_OUTPUT = ydoc['yamloutput']
|
22
22
|
NOTEXT_ERUBY = ydoc['notext*']['eruby']
|
23
23
|
NOTEXT_RUBY = ydoc['notext*']['ruby']
|
24
|
-
DEFUN_ERUBY = ydoc['defun*']['eruby']
|
24
|
+
#DEFUN_ERUBY = ydoc['defun*']['eruby']
|
25
|
+
key = RUBY_VERSION >= '1.9' ? 'eruby19' : RUBY_VERSION >= '1.8.7' ? 'eruby187' : 'eruby186'
|
26
|
+
DEFUN_ERUBY = ydoc['defun*'][key]
|
25
27
|
DEFUN_PHP = ydoc['defun*']['php']
|
26
28
|
|
27
29
|
class File
|
@@ -39,7 +41,7 @@ class MainTest < Test::Unit::TestCase
|
|
39
41
|
|
40
42
|
|
41
43
|
def _test
|
42
|
-
@name = (caller()[0] =~ /in `test_(.*?)'/) && $1
|
44
|
+
@name = (caller()[0] =~ /in `(?:block in )?test_(.*?)'/) && $1
|
43
45
|
return if ENV['TEST'] && ENV['TEST'] != @name
|
44
46
|
begin
|
45
47
|
File.write("#{@name}.pdata", @pdata) if @pdata
|
data/test/test-main.yaml
CHANGED
@@ -175,7 +175,7 @@ yamloutput: |
|
|
175
175
|
</html>
|
176
176
|
|
177
177
|
defun*:
|
178
|
-
|
178
|
+
eruby186: |
|
179
179
|
module View
|
180
180
|
|
181
181
|
(@@proc_table ||= {})['defun1'] = proc do
|
@@ -207,6 +207,71 @@ defun*:
|
|
207
207
|
|
208
208
|
end
|
209
209
|
|
210
|
+
eruby187: |
|
211
|
+
module View
|
212
|
+
|
213
|
+
(@@proc_table ||= {})['defun1'] = proc do
|
214
|
+
_erbout = ''; _erbout.concat "<html>\n"
|
215
|
+
; _erbout.concat " <body>\n"
|
216
|
+
; _erbout.concat " <h1>"; _erbout.concat(( @title ).to_s); _erbout.concat "</h1>\n"
|
217
|
+
; _erbout.concat " <table id=\"content\">\n"
|
218
|
+
; for item in @list
|
219
|
+
_erbout.concat " <tr>\n"
|
220
|
+
; _erbout.concat " <td>"; _erbout.concat((h item ).to_s); _erbout.concat "</td>\n"
|
221
|
+
; _erbout.concat " </tr>\n"
|
222
|
+
; end
|
223
|
+
_erbout.concat " </table>\n"
|
224
|
+
; _erbout.concat " </body>\n"
|
225
|
+
; _erbout.concat "</html>\n"
|
226
|
+
; _erbout
|
227
|
+
end#proc
|
228
|
+
|
229
|
+
module_function
|
230
|
+
def expand_defun1(context={})
|
231
|
+
if context.is_a?(Hash)
|
232
|
+
hash = context
|
233
|
+
context = Object.new
|
234
|
+
hash.each { |key, val| context.instance_variable_set("@#{key}", val) }
|
235
|
+
end
|
236
|
+
proc_obj = @@proc_table['defun1']
|
237
|
+
context.instance_eval(&proc_obj)
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
eruby19: |
|
243
|
+
module View
|
244
|
+
|
245
|
+
(@@proc_table ||= {})['defun1'] = proc do
|
246
|
+
#coding:US-ASCII
|
247
|
+
_erbout = ''; _erbout.concat "<html>\n"
|
248
|
+
; _erbout.concat " <body>\n"
|
249
|
+
; _erbout.concat " <h1>"; _erbout.concat(( @title ).to_s); _erbout.concat "</h1>\n"
|
250
|
+
; _erbout.concat " <table id=\"content\">\n"
|
251
|
+
; for item in @list
|
252
|
+
_erbout.concat " <tr>\n"
|
253
|
+
; _erbout.concat " <td>"; _erbout.concat((h item ).to_s); _erbout.concat "</td>\n"
|
254
|
+
; _erbout.concat " </tr>\n"
|
255
|
+
; end
|
256
|
+
_erbout.concat " </table>\n"
|
257
|
+
; _erbout.concat " </body>\n"
|
258
|
+
; _erbout.concat "</html>\n"
|
259
|
+
; _erbout.force_encoding(__ENCODING__)
|
260
|
+
end#proc
|
261
|
+
|
262
|
+
module_function
|
263
|
+
def expand_defun1(context={})
|
264
|
+
if context.is_a?(Hash)
|
265
|
+
hash = context
|
266
|
+
context = Object.new
|
267
|
+
hash.each { |key, val| context.instance_variable_set("@#{key}", val) }
|
268
|
+
end
|
269
|
+
proc_obj = @@proc_table['defun1']
|
270
|
+
context.instance_eval(&proc_obj)
|
271
|
+
end
|
272
|
+
|
273
|
+
end
|
274
|
+
|
210
275
|
php: |
|
211
276
|
<?php
|
212
277
|
function print_view_defun2($context) {
|
data/test/test-parser.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Rev
|
3
|
-
### $Release: 3.
|
2
|
+
### $Rev$
|
3
|
+
### $Release: 3.2.0 $
|
4
4
|
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
5
|
###
|
6
6
|
|
@@ -25,7 +25,8 @@ class ParserTest < Test::Unit::TestCase
|
|
25
25
|
def __test
|
26
26
|
case @style
|
27
27
|
when 'ruby'
|
28
|
-
parser = Kwartz::RubyStyleParser.new()
|
28
|
+
#parser = Kwartz::RubyStyleParser.new()
|
29
|
+
return
|
29
30
|
when 'css'
|
30
31
|
parser = Kwartz::CssStyleParser.new()
|
31
32
|
else
|
@@ -34,9 +35,17 @@ class ParserTest < Test::Unit::TestCase
|
|
34
35
|
if @name =~ /scan/
|
35
36
|
actual = ''
|
36
37
|
parser.__send__ :reset, @plogic
|
38
|
+
ctr = 0
|
37
39
|
while (ret = parser.scan()) != nil
|
38
40
|
actual << "#{parser.linenum}:#{parser.column}:"
|
39
41
|
actual << " token=#{parser.token.inspect}, value=#{parser.value.inspect}\n"
|
42
|
+
if parser.token == :'{'
|
43
|
+
ctr += 1
|
44
|
+
parser.mode = :declaration if ctr == 1
|
45
|
+
elsif parser.token == :'}'
|
46
|
+
ctr -= 1
|
47
|
+
parser.mode = :selector if ctr == 0
|
48
|
+
end
|
40
49
|
break if ret == :error
|
41
50
|
end
|
42
51
|
else
|
data/test/test-parser.yaml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
## $Rev
|
2
|
-
## $Release: 3.
|
1
|
+
## $Rev$
|
2
|
+
## $Release: 3.2.0 $
|
3
3
|
## copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
4
4
|
|
5
5
|
###
|
@@ -16,8 +16,7 @@
|
|
16
16
|
}
|
17
17
|
expected*:
|
18
18
|
ruby: |
|
19
|
-
2:
|
20
|
-
2:6: token=:ident, value="list"
|
19
|
+
2:6: token=:selector, value="#list"
|
21
20
|
2:8: token=:"{", value="{"
|
22
21
|
3:8: token=:value, value="value"
|
23
22
|
4:8: token=:attrs, value="attrs"
|
@@ -26,6 +25,16 @@
|
|
26
25
|
6:10: token=:"{", value="{"
|
27
26
|
7:4: token=:"}", value="}"
|
28
27
|
8:2: token=:"}", value="}"
|
28
|
+
# 2:2: token=35, value="#"
|
29
|
+
# 2:6: token=:ident, value="list"
|
30
|
+
# 2:8: token=:"{", value="{"
|
31
|
+
# 3:8: token=:value, value="value"
|
32
|
+
# 4:8: token=:attrs, value="attrs"
|
33
|
+
# 5:9: token=:append, value="append"
|
34
|
+
# 6:8: token=:logic, value="logic"
|
35
|
+
# 6:10: token=:"{", value="{"
|
36
|
+
# 7:4: token=:"}", value="}"
|
37
|
+
# 8:2: token=:"}", value="}"
|
29
38
|
php: |
|
30
39
|
2:2: token=#, value="#"
|
31
40
|
2:6: token=:ident, value="list"
|
@@ -68,7 +77,7 @@
|
|
68
77
|
#list {
|
69
78
|
}
|
70
79
|
expected: &elem1|
|
71
|
-
-
|
80
|
+
- selectors: ["#list"]
|
72
81
|
|
73
82
|
- name: parse_elem1_ruby
|
74
83
|
style: ruby
|
@@ -86,7 +95,7 @@
|
|
86
95
|
value: @user['name'];
|
87
96
|
}
|
88
97
|
expected: &value1|
|
89
|
-
-
|
98
|
+
- selectors: ["#list"]
|
90
99
|
cont: @user['name']
|
91
100
|
|
92
101
|
- name: parse_value_part1_ruby
|
@@ -107,7 +116,7 @@
|
|
107
116
|
'color' @prop[:color];
|
108
117
|
}
|
109
118
|
expected: &attrs1|
|
110
|
-
-
|
119
|
+
- selectors: ["#list"]
|
111
120
|
attrs:
|
112
121
|
- name: class
|
113
122
|
value: @class
|
@@ -134,11 +143,11 @@
|
|
134
143
|
append: aaa, bbb,ccc;
|
135
144
|
}
|
136
145
|
expected: &append1|
|
137
|
-
-
|
146
|
+
- selectors: ["#list1"]
|
138
147
|
append:
|
139
148
|
- @name==item['name'] ? " checked='checked'" : ''
|
140
149
|
- chk(@name)
|
141
|
-
-
|
150
|
+
- selectors: ["#list2"]
|
142
151
|
append:
|
143
152
|
- aaa, bbb,ccc
|
144
153
|
|
@@ -152,11 +161,11 @@
|
|
152
161
|
append aaa, bbb,ccc
|
153
162
|
}
|
154
163
|
expected: |
|
155
|
-
-
|
164
|
+
- selectors: ["#list1"]
|
156
165
|
append:
|
157
166
|
- @name==item['name'] ? " checked='checked'" : ''
|
158
167
|
- chk(@name)
|
159
|
-
-
|
168
|
+
- selectors: ["#list2"]
|
160
169
|
append:
|
161
170
|
- aaa
|
162
171
|
- bbb,ccc
|
@@ -169,7 +178,7 @@
|
|
169
178
|
remove: "foo", "bar", 'baz';
|
170
179
|
}
|
171
180
|
expected: &remove1|
|
172
|
-
-
|
181
|
+
- selectors: ["#list"]
|
173
182
|
remove:
|
174
183
|
- foo
|
175
184
|
- bar
|
@@ -191,7 +200,7 @@
|
|
191
200
|
tagname: 'html:html';
|
192
201
|
}
|
193
202
|
expected: &tagname1|
|
194
|
-
-
|
203
|
+
- selectors: ["#list"]
|
195
204
|
tagname: html:html
|
196
205
|
|
197
206
|
- name: parse_tagname_part1_ruby
|
@@ -216,7 +225,7 @@
|
|
216
225
|
}
|
217
226
|
}
|
218
227
|
expected: &logic1|
|
219
|
-
-
|
228
|
+
- selectors: ["#list"]
|
220
229
|
logic:
|
221
230
|
- <% @list.each { |item|%>
|
222
231
|
- _stag
|
@@ -254,7 +263,7 @@
|
|
254
263
|
}
|
255
264
|
}
|
256
265
|
expected: &logic2|
|
257
|
-
-
|
266
|
+
- selectors: ["#list"]
|
258
267
|
logic:
|
259
268
|
- <% @list.each_with_index { |item, i|%>
|
260
269
|
- <% if i % 2 == 0%>
|
@@ -280,6 +289,25 @@
|
|
280
289
|
}
|
281
290
|
expected: *logic2
|
282
291
|
|
292
|
+
###
|
293
|
+
- name: parse_beforeafter_css
|
294
|
+
style: css
|
295
|
+
plogic: |
|
296
|
+
#list {
|
297
|
+
before: {
|
298
|
+
print "-- start --\n"
|
299
|
+
}
|
300
|
+
after: {
|
301
|
+
print "-- end --\n"
|
302
|
+
}
|
303
|
+
}
|
304
|
+
expected: |
|
305
|
+
- selectors: ["#list"]
|
306
|
+
before:
|
307
|
+
- print(<%="-- start --\n"%>)
|
308
|
+
after:
|
309
|
+
- print(<%="-- end --\n"%>)
|
310
|
+
|
283
311
|
###
|
284
312
|
- name: parse_import_command1_css
|
285
313
|
style: css
|
@@ -289,7 +317,7 @@
|
|
289
317
|
value: item;
|
290
318
|
}
|
291
319
|
expected: |
|
292
|
-
-
|
320
|
+
- selectors: ["#page_link"]
|
293
321
|
cont: page.label
|
294
322
|
attrs:
|
295
323
|
- name: href
|
@@ -298,7 +326,7 @@
|
|
298
326
|
- <% if page%>
|
299
327
|
- _elem
|
300
328
|
- <% end%>
|
301
|
-
-
|
329
|
+
- selectors: ["#item"]
|
302
330
|
cont: item
|
303
331
|
setup*:
|
304
332
|
ruby: |
|
@@ -339,7 +367,7 @@
|
|
339
367
|
- name: parse_multi_selector_css
|
340
368
|
style: css
|
341
369
|
plogic: |
|
342
|
-
#
|
370
|
+
#id, .class, tag::name {
|
343
371
|
value: $item;
|
344
372
|
logic: {
|
345
373
|
foreach ($list as $item) {
|
@@ -350,23 +378,7 @@
|
|
350
378
|
}
|
351
379
|
}
|
352
380
|
expected: |
|
353
|
-
-
|
354
|
-
cont: $item
|
355
|
-
logic:
|
356
|
-
- <% foreach ($list as $item) {%>
|
357
|
-
- _stag
|
358
|
-
- _cont
|
359
|
-
- _etag
|
360
|
-
- <% }%>
|
361
|
-
- name: item2
|
362
|
-
cont: $item
|
363
|
-
logic:
|
364
|
-
- <% foreach ($list as $item) {%>
|
365
|
-
- _stag
|
366
|
-
- _cont
|
367
|
-
- _etag
|
368
|
-
- <% }%>
|
369
|
-
- name: item3
|
381
|
+
- selectors: ["#id", ".class", "tag::name"]
|
370
382
|
cont: $item
|
371
383
|
logic:
|
372
384
|
- <% foreach ($list as $item) {%>
|
@@ -380,8 +392,6 @@
|
|
380
392
|
style: css
|
381
393
|
plogic: |
|
382
394
|
#DOCUMENT {
|
383
|
-
local: i, item, title, list;
|
384
|
-
global: _context;
|
385
395
|
begin: {
|
386
396
|
title = _context[:title]
|
387
397
|
list = _context[:list]
|
@@ -393,23 +403,26 @@
|
|
393
403
|
end
|
394
404
|
}
|
395
405
|
}
|
406
|
+
# local: i, item, title, list;
|
407
|
+
# global: _context;
|
396
408
|
expected: |
|
397
|
-
-
|
398
|
-
|
399
|
-
- _context
|
400
|
-
local:
|
401
|
-
- i
|
402
|
-
- item
|
403
|
-
- title
|
404
|
-
- list
|
405
|
-
begin:
|
409
|
+
- selectors: ["#DOCUMENT"]
|
410
|
+
before:
|
406
411
|
- <% title = _context[:title]%>
|
407
412
|
- <% list = _context[:list]%>
|
408
|
-
|
413
|
+
after:
|
409
414
|
- print(<%="*** debug:\n"%>)
|
410
415
|
- <% _context.each do |key, value|%>
|
411
416
|
- print(<%="*** key=#{key}, value=#{value.inspect}"%>)
|
412
417
|
- <% end%>
|
418
|
+
# global:
|
419
|
+
# - _context
|
420
|
+
# local:
|
421
|
+
# - i
|
422
|
+
# - item
|
423
|
+
# - title
|
424
|
+
# - list
|
425
|
+
|
413
426
|
###
|
414
427
|
- name: parse_comment1_css
|
415
428
|
style: css
|
@@ -423,7 +436,7 @@
|
|
423
436
|
}
|
424
437
|
/* tail comment may cause parse error! */
|
425
438
|
expected: |
|
426
|
-
-
|
439
|
+
- selectors: ["#foo"]
|
427
440
|
cont: foo
|
428
441
|
|
429
442
|
- name: parse_comment2_css
|
@@ -444,7 +457,7 @@
|
|
444
457
|
}
|
445
458
|
}
|
446
459
|
expected: |
|
447
|
-
-
|
460
|
+
- selectors: ["#foo"]
|
448
461
|
cont: item
|
449
462
|
logic:
|
450
463
|
- _elem
|
@@ -475,7 +488,7 @@
|
|
475
488
|
}
|
476
489
|
}
|
477
490
|
expected: &all1 |
|
478
|
-
-
|
491
|
+
- selectors: ["#item"]
|
479
492
|
stag: start_link_tag('user', 'name')
|
480
493
|
cont: $item
|
481
494
|
etag: end_link()
|
@@ -524,7 +537,7 @@
|
|
524
537
|
}
|
525
538
|
}
|
526
539
|
expected: |
|
527
|
-
-
|
540
|
+
- selectors: ["#item"]
|
528
541
|
stag: start_link_tag('user', 'name')
|
529
542
|
cont: item
|
530
543
|
etag: end_link()
|
data/test/test-rails.rb
CHANGED
data/test/test-ruleset.rb
CHANGED
data/test/test-ruleset.yaml
CHANGED
@@ -652,14 +652,303 @@
|
|
652
652
|
{{*<? } !>*}}
|
653
653
|
</ul>
|
654
654
|
|
655
|
+
###
|
656
|
+
- name: before
|
657
|
+
title: before, after
|
658
|
+
desc: |
|
659
|
+
{{,before:,}} and {{,after:,}} property represents the prework and postwork
|
660
|
+
of each element's presentation logics.
|
661
|
+
These properties enables to share or reuse presentation logics.
|
662
|
+
.#These properties takes target code block and are available only with
|
663
|
+
.#'#DOCUMENT' selector.
|
664
|
+
|
665
|
+
pdata: |
|
666
|
+
<!-- Groups -->
|
667
|
+
<ul id="mark:groups">
|
668
|
+
<li class="item"></li>
|
669
|
+
</ul>
|
670
|
+
|
671
|
+
<!-- Members -->
|
672
|
+
<ol id="mark:members">
|
673
|
+
<li class="item"></li>
|
674
|
+
</ol>
|
675
|
+
|
676
|
+
plogic*:
|
677
|
+
eruby: |
|
678
|
+
#groups {
|
679
|
+
{{*before:*}} {
|
680
|
+
{{*list = @groups*}}
|
681
|
+
}
|
682
|
+
{{*after:*}} {
|
683
|
+
{{*group_count = count*}}
|
684
|
+
}
|
685
|
+
}
|
686
|
+
#members {
|
687
|
+
{{*before:*}} {
|
688
|
+
{{*list = @members*}}
|
689
|
+
}
|
690
|
+
{{*after:*}} {
|
691
|
+
{{*member_count = count*}}
|
692
|
+
}
|
693
|
+
}
|
694
|
+
|
695
|
+
/* common 'logic:' part */
|
696
|
+
#groups, #members {
|
697
|
+
logic: {
|
698
|
+
count = 0
|
699
|
+
_stag
|
700
|
+
for item in list
|
701
|
+
unless item.obsolete?
|
702
|
+
count += 1
|
703
|
+
_cont
|
704
|
+
end
|
705
|
+
end
|
706
|
+
_etag
|
707
|
+
}
|
708
|
+
}
|
709
|
+
|
710
|
+
.item {
|
711
|
+
value: item.name;
|
712
|
+
}
|
713
|
+
|
714
|
+
php: |
|
715
|
+
#groups {
|
716
|
+
{{*before:*}} {
|
717
|
+
{{*$list = $groups;*}}
|
718
|
+
}
|
719
|
+
{{*after:*}} {
|
720
|
+
{{*$group_count = $count;*}}
|
721
|
+
}
|
722
|
+
}
|
723
|
+
#members {
|
724
|
+
{{*before:*}} {
|
725
|
+
{{*$list = $members;*}}
|
726
|
+
}
|
727
|
+
{{*after:*}} {
|
728
|
+
{{*$member_count = $count;*}}
|
729
|
+
}
|
730
|
+
}
|
731
|
+
|
732
|
+
/* common 'logic:' part */
|
733
|
+
#groups, #members {
|
734
|
+
logic: {
|
735
|
+
$count = 0;
|
736
|
+
_stag();
|
737
|
+
foreach ($list as $item) {
|
738
|
+
if (! $item->obsolete) {
|
739
|
+
$count++;
|
740
|
+
_cont();
|
741
|
+
}
|
742
|
+
}
|
743
|
+
_etag();
|
744
|
+
}
|
745
|
+
}
|
746
|
+
|
747
|
+
.item {
|
748
|
+
value: $item->name;
|
749
|
+
}
|
750
|
+
|
751
|
+
jstl: |
|
752
|
+
#groups {
|
753
|
+
{{*before:*}} {
|
754
|
+
{{*<c:set var="list" value="${groups}" />*}}
|
755
|
+
}
|
756
|
+
{{*after:*}} {
|
757
|
+
{{*<c:set var="group_count" value="${count}" />*}}
|
758
|
+
}
|
759
|
+
}
|
760
|
+
#members {
|
761
|
+
{{*before:*}} {
|
762
|
+
{{*<c:set var="list" value="${members}" />*}}
|
763
|
+
}
|
764
|
+
{{*after:*}} {
|
765
|
+
{{*<c:set var="members_count" value="${count}" />*}}
|
766
|
+
}
|
767
|
+
}
|
768
|
+
|
769
|
+
/* common 'logic:' part */
|
770
|
+
#groups, #members {
|
771
|
+
logic: {
|
772
|
+
<c:set var="count" value="${0}" />
|
773
|
+
_stag()
|
774
|
+
<c:forEach var="item" items="${list}" />
|
775
|
+
<c:if test="${not item.obsolete}" />
|
776
|
+
<c:set var="count" value="${count+1}" />
|
777
|
+
_cont()
|
778
|
+
</c:if>
|
779
|
+
</c:forEach>
|
780
|
+
_etag()
|
781
|
+
}
|
782
|
+
}
|
783
|
+
|
784
|
+
.item {
|
785
|
+
value: item.name;
|
786
|
+
}
|
787
|
+
|
788
|
+
eperl: |
|
789
|
+
#groups {
|
790
|
+
{{*before:*}} {
|
791
|
+
{{*@list = @groups;*}}
|
792
|
+
}
|
793
|
+
{{*after:*}} {
|
794
|
+
{{*$group_count = $count;*}}
|
795
|
+
}
|
796
|
+
}
|
797
|
+
#members {
|
798
|
+
{{*before:*}} {
|
799
|
+
{{*@list = @members;*}}
|
800
|
+
}
|
801
|
+
{{*after:*}} {
|
802
|
+
{{*$member_count = $count;*}}
|
803
|
+
}
|
804
|
+
}
|
805
|
+
|
806
|
+
/* common 'logic:' part */
|
807
|
+
#groups, #members {
|
808
|
+
logic: {
|
809
|
+
$count = 0;
|
810
|
+
_stag();
|
811
|
+
foreach $item (@list) {
|
812
|
+
if (! $item['obsolete']) {
|
813
|
+
$count++;
|
814
|
+
_cont();
|
815
|
+
}
|
816
|
+
}
|
817
|
+
_etag();
|
818
|
+
}
|
819
|
+
}
|
820
|
+
|
821
|
+
.item {
|
822
|
+
value: $item['name'];
|
823
|
+
}
|
824
|
+
|
825
|
+
expected*:
|
826
|
+
eruby: |
|
827
|
+
<!-- Groups -->
|
828
|
+
<% {{*list = @groups*}} %>
|
829
|
+
<% count = 0 %>
|
830
|
+
<ul>
|
831
|
+
<% for item in list %>
|
832
|
+
<% unless item.obsolete? %>
|
833
|
+
<% count += 1 %>
|
834
|
+
<li class="item"><%= item.name %></li>
|
835
|
+
<% end %>
|
836
|
+
<% end %>
|
837
|
+
</ul>
|
838
|
+
<% {{*group_count = count*}} %>
|
839
|
+
|
840
|
+
<!-- Members -->
|
841
|
+
<% {{*list = @members*}} %>
|
842
|
+
<% count = 0 %>
|
843
|
+
<ol>
|
844
|
+
<% for item in list %>
|
845
|
+
<% unless item.obsolete? %>
|
846
|
+
<% count += 1 %>
|
847
|
+
<li class="item"><%= item.name %></li>
|
848
|
+
<% end %>
|
849
|
+
<% end %>
|
850
|
+
</ol>
|
851
|
+
<% {{*member_count = count*}} %>
|
852
|
+
|
853
|
+
php: |
|
854
|
+
<!-- Groups -->
|
855
|
+
<?php {{*$list = $groups;*}} ?>
|
856
|
+
<?php $count = 0; ?>
|
857
|
+
<ul>
|
858
|
+
<?php foreach ($list as $item) { ?>
|
859
|
+
<?php if (! $item->obsolete) { ?>
|
860
|
+
<?php $count++; ?>
|
861
|
+
<li class="item"><?php echo $item->name; ?></li>
|
862
|
+
<?php } ?>
|
863
|
+
<?php } ?>
|
864
|
+
</ul>
|
865
|
+
<?php {{*$group_count = $count;*}} ?>
|
866
|
+
|
867
|
+
<!-- Members -->
|
868
|
+
<?php {{*$list = $members;*}} ?>
|
869
|
+
<?php $count = 0; ?>
|
870
|
+
<ol>
|
871
|
+
<?php foreach ($list as $item) { ?>
|
872
|
+
<?php if (! $item->obsolete) { ?>
|
873
|
+
<?php $count++; ?>
|
874
|
+
<li class="item"><?php echo $item->name; ?></li>
|
875
|
+
<?php } ?>
|
876
|
+
<?php } ?>
|
877
|
+
</ol>
|
878
|
+
<?php {{*$member_count = $count;*}} ?>
|
879
|
+
|
880
|
+
jstl: |
|
881
|
+
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
882
|
+
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
883
|
+
<!-- Groups -->
|
884
|
+
{{*<c:set var="list" value="${groups}" />*}}
|
885
|
+
<c:set var="count" value="${0}" />
|
886
|
+
<ul>
|
887
|
+
<c:forEach var="item" items="${list}" />
|
888
|
+
<c:if test="${not item.obsolete}" />
|
889
|
+
<c:set var="count" value="${count+1}" />
|
890
|
+
<li class="item">${item.name}</li>
|
891
|
+
</c:if>
|
892
|
+
</c:forEach>
|
893
|
+
</ul>
|
894
|
+
{{*<c:set var="group_count" value="${count}" />*}}
|
895
|
+
|
896
|
+
<!-- Members -->
|
897
|
+
{{*<c:set var="list" value="${members}" />*}}
|
898
|
+
<c:set var="count" value="${0}" />
|
899
|
+
<ol>
|
900
|
+
<c:forEach var="item" items="${list}" />
|
901
|
+
<c:if test="${not item.obsolete}" />
|
902
|
+
<c:set var="count" value="${count+1}" />
|
903
|
+
<li class="item">${item.name}</li>
|
904
|
+
</c:if>
|
905
|
+
</c:forEach>
|
906
|
+
</ol>
|
907
|
+
{{*<c:set var="members_count" value="${count}" />*}}
|
908
|
+
|
909
|
+
eperl: |
|
910
|
+
<!-- Groups -->
|
911
|
+
<? {{*@list = @groups;*}} !>
|
912
|
+
<? $count = 0; !>
|
913
|
+
<ul>
|
914
|
+
<? foreach $item (@list) { !>
|
915
|
+
<? if (! $item['obsolete']) { !>
|
916
|
+
<? $count++; !>
|
917
|
+
<li class="item"><?= $item['name'] !></li>
|
918
|
+
<? } !>
|
919
|
+
<? } !>
|
920
|
+
</ul>
|
921
|
+
<? {{*$group_count = $count;*}} !>
|
922
|
+
|
923
|
+
<!-- Members -->
|
924
|
+
<? {{*@list = @members;*}} !>
|
925
|
+
<? $count = 0; !>
|
926
|
+
<ol>
|
927
|
+
<? foreach $item (@list) { !>
|
928
|
+
<? if (! $item['obsolete']) { !>
|
929
|
+
<? $count++; !>
|
930
|
+
<li class="item"><?= $item['name'] !></li>
|
931
|
+
<? } !>
|
932
|
+
<? } !>
|
933
|
+
</ol>
|
934
|
+
<? {{*$member_count = $count;*}} !>
|
935
|
+
|
936
|
+
|
655
937
|
###
|
656
938
|
- name: begin
|
657
939
|
title: begin, end
|
658
940
|
desc: |
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
941
|
+
{{,begin:,}} and {{,end:,}} properties are equal to {{,before:,}} and {{,after:,}}.
|
942
|
+
{{*These are obsolete and leaved for compatibility*}}.
|
943
|
+
|
944
|
+
{{,begin:,}} and {{,end:,}} were aimed to add prework and postwork of document,
|
945
|
+
and restricted to be available only with '#DOCUMENT' selector.
|
946
|
+
Currently {{,before:,}} and {{,after:,}} are available with '#DOCUMENT' selector,
|
947
|
+
so you should use these properties instead of {{,begin:,}} and {{,end:,}}.
|
948
|
+
.#{{,begin:,}} and {{,end:,}} property represents the prework and postwork
|
949
|
+
.#of document respectively.
|
950
|
+
.#These properties takes target code block and are available only with
|
951
|
+
.#'#DOCUMENT' selector.
|
663
952
|
|
664
953
|
pdata: |
|
665
954
|
<p>Hello <span id="mark:username">world</span>!</p>
|
@@ -796,3 +1085,175 @@
|
|
796
1085
|
<? } !>
|
797
1086
|
</ul>
|
798
1087
|
{{*<?= "<!-- document end -->\n" !>*}}
|
1088
|
+
|
1089
|
+
|
1090
|
+
###
|
1091
|
+
- name: attrvar
|
1092
|
+
title: Attribute Variable
|
1093
|
+
desc: |
|
1094
|
+
Attribute variable is a notation such as '$(attrname)' which represents attribute value.
|
1095
|
+
Attribute variable allows presentation logic to refer attribute value in presentation data.
|
1096
|
+
|
1097
|
+
pdata: |
|
1098
|
+
<form action="create" {{*method="post"*}}>
|
1099
|
+
Username: <input type="text" id="comment_username" {{*size="30"*}}><br>
|
1100
|
+
Comment: <textarea id="comment_text" {{*rows="3"*}} {{*cols="50"*}}></textarea><br>
|
1101
|
+
<input id="mark:submit" type="submit" {{*value="Send comment"*}}>
|
1102
|
+
</form>
|
1103
|
+
|
1104
|
+
plogic*:
|
1105
|
+
eruby: |
|
1106
|
+
form {
|
1107
|
+
stag: start_form_tag :action=>'{{*$(action)*}}';
|
1108
|
+
}
|
1109
|
+
#comment_username {
|
1110
|
+
elem: text_field 'comment', 'username', :size=>{{*$(size)*}};
|
1111
|
+
}
|
1112
|
+
#comment_text {
|
1113
|
+
elem: text_area 'comment', 'text', :rows=>{{*$(rows)*}}, :cols=>{{*$(cols)*}};
|
1114
|
+
}
|
1115
|
+
#submit {
|
1116
|
+
elem: submit_tag '{{*$(value)*}}';
|
1117
|
+
}
|
1118
|
+
|
1119
|
+
php: |
|
1120
|
+
form {
|
1121
|
+
stag: form_tag('comment/{{*$(action)*}}');
|
1122
|
+
}
|
1123
|
+
#comment_username {
|
1124
|
+
elem: text_field('comment', 'username', array('size'=>{{*$(size)*}}));
|
1125
|
+
}
|
1126
|
+
#comment_text {
|
1127
|
+
elem: text_area('comment', 'text', array('rows'=>{{*$(rows)*}}, 'cols'=>{{*$(cols)*}}));
|
1128
|
+
}
|
1129
|
+
#submit {
|
1130
|
+
elem: submit_tag('{{*$(value)*}}');
|
1131
|
+
}
|
1132
|
+
|
1133
|
+
jstl: |
|
1134
|
+
form {
|
1135
|
+
logic: {
|
1136
|
+
<form:form action="{{*$(action)*}}.do">
|
1137
|
+
_cont
|
1138
|
+
</form:form>
|
1139
|
+
}
|
1140
|
+
}
|
1141
|
+
#comment_username {
|
1142
|
+
logic: {
|
1143
|
+
<form:textfield name="username" size="{{*$(size)*}}"/>
|
1144
|
+
}
|
1145
|
+
}
|
1146
|
+
#comment_text {
|
1147
|
+
logic: {
|
1148
|
+
<form:textarea name="text", rows="{{*$(rows)*}}" cols="{{*$(cols)*}}"/>
|
1149
|
+
}
|
1150
|
+
}
|
1151
|
+
#submit {
|
1152
|
+
logic: {
|
1153
|
+
<form:submit value="{{*$(value)*}}"/>
|
1154
|
+
}
|
1155
|
+
}
|
1156
|
+
|
1157
|
+
eperl: |
|
1158
|
+
form {
|
1159
|
+
stag: &form_tag({'action'=>'{{*$(action)*}}'});
|
1160
|
+
}
|
1161
|
+
#comment_username {
|
1162
|
+
elem: &text_field('comment', 'username', {'size'=>{{*$(size)*}}});
|
1163
|
+
}
|
1164
|
+
#comment_text {
|
1165
|
+
elem: &text_area('comment', 'text', {'rows'=>{{*$(rows)*}}, 'cols'=>{{*$(cols)*}}});
|
1166
|
+
}
|
1167
|
+
#submit {
|
1168
|
+
elem: &submit_tag('{{*$(value)*}}');
|
1169
|
+
}
|
1170
|
+
|
1171
|
+
expected*:
|
1172
|
+
|
1173
|
+
eruby: |
|
1174
|
+
<%= start_form_tag :action=>'{{*create*}}' %>
|
1175
|
+
Username: <%= text_field 'comment', 'username', :size=>{{*30*}} %><br>
|
1176
|
+
Comment: <%= text_area 'comment', 'text', :rows=>{{*3*}}, :cols=>{{*50*}} %><br>
|
1177
|
+
<%= submit_tag '{{*Send comment*}}' %>
|
1178
|
+
</form>
|
1179
|
+
|
1180
|
+
php: |
|
1181
|
+
<?php echo form_tag('comment/{{*create*}}'); ?>
|
1182
|
+
Username: <?php echo text_field('comment', 'username', array('size'=>{{*30*}})); ?><br>
|
1183
|
+
Comment: <?php echo text_area('comment', 'text', array('rows'=>{{*3*}}, 'cols'=>{{*50*}})); ?><br>
|
1184
|
+
<?php echo submit_tag('{{*Send comment*}}'); ?>
|
1185
|
+
</form>
|
1186
|
+
|
1187
|
+
eperl: |
|
1188
|
+
<?= &form_tag({'action'=>'{{*create*}}'}) !>
|
1189
|
+
Username: <?= &text_field('comment', 'username', {'size'=>{{*30*}}}) !><br>
|
1190
|
+
Comment: <?= &text_area('comment', 'text', {'rows'=>{{*3*}}, 'cols'=>{{*50*}}}) !><br>
|
1191
|
+
<?= &submit_tag('{{*Send comment*}}') !>
|
1192
|
+
</form>
|
1193
|
+
|
1194
|
+
jstl: |
|
1195
|
+
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
1196
|
+
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
1197
|
+
<form:form action="{{*create*}}.do">
|
1198
|
+
Username: <form:textfield name="username" size="{{*30*}}"/>
|
1199
|
+
<br>
|
1200
|
+
Comment: <form:textarea name="text", rows="{{*3*}}" cols="{{*50*}}"/>
|
1201
|
+
<br>
|
1202
|
+
<form:submit value="{{*Send comment*}}"/>
|
1203
|
+
</form:form>
|
1204
|
+
|
1205
|
+
|
1206
|
+
###
|
1207
|
+
- name: attrvar2
|
1208
|
+
hide: yes
|
1209
|
+
title: Attribute Variable2
|
1210
|
+
pdata: |
|
1211
|
+
<h1 class="section">...title...</h1>
|
1212
|
+
|
1213
|
+
plogic*:
|
1214
|
+
eruby: |
|
1215
|
+
h1 {
|
1216
|
+
attrs: 'title' escape('$(class)');
|
1217
|
+
value: 'class:$(class)';
|
1218
|
+
append: flag ? ' klass="$(class)"' : '';
|
1219
|
+
}
|
1220
|
+
|
1221
|
+
php: |
|
1222
|
+
h1 {
|
1223
|
+
attrs: 'title' escape('$(class)');
|
1224
|
+
value: 'class:$(class)';
|
1225
|
+
append: flag ? ' klass="$(class)"' : '';
|
1226
|
+
}
|
1227
|
+
|
1228
|
+
jstl: |
|
1229
|
+
h1 {
|
1230
|
+
attrs: 'title' escape('$(class)');
|
1231
|
+
value: 'class:$(class)';
|
1232
|
+
append: flag ? ' klass="$(class)"' : '';
|
1233
|
+
}
|
1234
|
+
|
1235
|
+
eperl: |
|
1236
|
+
h1 {
|
1237
|
+
attrs: 'title' escape('$(class)');
|
1238
|
+
value: 'class:$(class)';
|
1239
|
+
append: flag ? ' klass="$(class)"' : '';
|
1240
|
+
}
|
1241
|
+
|
1242
|
+
expected*:
|
1243
|
+
|
1244
|
+
eruby: |
|
1245
|
+
<h1 class="section" title="<%= escape('section') %>"<%= flag ? ' klass="section"' : '' %>><%= 'class:section' %></h1>
|
1246
|
+
|
1247
|
+
php: |
|
1248
|
+
<h1 class="section" title="<?php echo escape('section'); ?>"<?php echo flag ? ' klass="section"' : ''; ?>><?php echo 'class:section'; ?></h1>
|
1249
|
+
|
1250
|
+
eperl: |
|
1251
|
+
<h1 class="section" title="<?= escape('section') !>"<?= flag ? ' klass="section"' : '' !>><?= 'class:section' !></h1>
|
1252
|
+
|
1253
|
+
jstl: |
|
1254
|
+
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
1255
|
+
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
1256
|
+
<h1 class="section" title="${escape('section')}"${flag ? ' klass="section"' : ''}>class:section</h1>
|
1257
|
+
# <h1 class="section" title="${escape('section')}"${flag ? ' klass="section"' : ''}>${'class:section'}</h1>
|
1258
|
+
|
1259
|
+
|