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.
- 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/lib/kwartz.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
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
|
|
7
7
|
|
8
8
|
module Kwartz
|
9
9
|
|
10
|
-
RELEASE = ('$Release: 3.
|
10
|
+
RELEASE = ('$Release: 3.2.0 $' =~ /\$Release: (\S+)\s*\$/) && $1
|
11
11
|
|
12
12
|
end
|
13
13
|
|
data/lib/kwartz/assert.rb
CHANGED
data/lib/kwartz/binding/eperl.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
|
|
@@ -14,10 +14,49 @@ module Kwartz
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
module EperlExpressionParser
|
18
|
+
|
19
|
+
|
20
|
+
def parse_expr_str(expr_str, linenum)
|
21
|
+
case expr_str
|
22
|
+
when /\A(\w+)\z/ # variable
|
23
|
+
expr = '$'+$1
|
24
|
+
when /\A(\w+)\.(\w+)\z/ # object.property
|
25
|
+
expr = "$#{$1}->{#{$2}}"
|
26
|
+
when /\A(\w+)\[(.*?'|".*?"|:\w+)\]\z/ # hash
|
27
|
+
key = $2[0] == ?: ? "'#{$2[1..-1]}'" : $2
|
28
|
+
expr = "$#{$1}{#{key}}"
|
29
|
+
when /\A(\w+)\[(\w+)\]\z/ # array or hash
|
30
|
+
begin
|
31
|
+
expr = "$#{$1}[#{Integer($2)}]"
|
32
|
+
rescue ArgumentError
|
33
|
+
expr = "$#{$1}[$#{$2}]"
|
34
|
+
end
|
35
|
+
else
|
36
|
+
raise convert_error("'#{expr_str}': invalid expression.", linenum)
|
37
|
+
end
|
38
|
+
return expr
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def parse_expr_str!(expr_str)
|
43
|
+
begin
|
44
|
+
return parse_expr_str(expr_str, -1)
|
45
|
+
rescue
|
46
|
+
return expr_str
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
17
55
|
##
|
18
56
|
## directive handler for ePerl
|
19
57
|
##
|
20
58
|
class EperlHandler < Handler
|
59
|
+
include EperlExpressionParser
|
21
60
|
|
22
61
|
|
23
62
|
PERL_DIRECTIVE_PATTERN = /\A(\w+)(?:\s*\(\s*(.*)\))?\z/
|
@@ -41,21 +80,21 @@ module Kwartz
|
|
41
80
|
end
|
42
81
|
|
43
82
|
|
44
|
-
def handle(
|
83
|
+
def handle(directive, elem_info, stmt_list)
|
45
84
|
ret = super
|
46
85
|
return ret if ret
|
47
86
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
87
|
+
d_name = directive.name
|
88
|
+
d_arg = directive.arg
|
89
|
+
d_str = directive.str
|
90
|
+
e = elem_info
|
52
91
|
|
53
92
|
case d_name
|
54
93
|
|
55
94
|
when :foreach, :Foreach, :FOREACH, :list, :List, :LIST
|
56
95
|
is_foreach = d_name == :foreach || d_name == :Foreach || d_name == :FOREACH
|
57
96
|
unless d_arg =~ /\A(\$\w+)(?:,\s*(\$\w+))?\s+in\s+(.*)\z/
|
58
|
-
raise convert_error("'#{d_str}': invalid argument.", stag_info.linenum)
|
97
|
+
raise convert_error("'#{d_str}': invalid argument.", e.stag_info.linenum)
|
59
98
|
end
|
60
99
|
loopvar = $1 ; loopval = $2 ; looplist = $3
|
61
100
|
counter = d_name == :foreach || d_name == :list ? nil : "#{loopvar}_ctr"
|
@@ -71,11 +110,11 @@ module Kwartz
|
|
71
110
|
code << " #{counter}++;" if counter
|
72
111
|
code << " my #{toggle} = #{counter}%2==0 ? #{self.even} : #{self.odd};" if toggle
|
73
112
|
if is_foreach
|
74
|
-
wrap_element_with_native_stmt(
|
113
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "}", :foreach)
|
75
114
|
else
|
76
|
-
wrap_content_with_native_stmt(
|
115
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, code, "}", :foreach)
|
77
116
|
end
|
78
|
-
#stmt_list << stag_stmt(
|
117
|
+
#stmt_list << stag_stmt(elem_info) if !is_foreach
|
79
118
|
#stmt_list << NativeStatement.new("my #{counter} = 0;") if counter
|
80
119
|
#if loopval
|
81
120
|
# stmt_list << NativeStatement.new("foreach my #{loopvar} (keys #{looplist}) {", :foreach)
|
@@ -85,23 +124,23 @@ module Kwartz
|
|
85
124
|
#end
|
86
125
|
#stmt_list << NativeStatement.new(" #{counter}++;") if counter
|
87
126
|
#stmt_list << NativeStatement.new(" my #{toggle} = #{counter}%2==0 ? #{self.even} : #{self.odd};") if toggle
|
88
|
-
#stmt_list << stag_stmt(
|
89
|
-
#stmt_list.concat(
|
90
|
-
#stmt_list << etag_stmt(
|
127
|
+
#stmt_list << stag_stmt(elem_info) if is_foreach
|
128
|
+
#stmt_list.concat(elem_info.cont_stmts)
|
129
|
+
#stmt_list << etag_stmt(elem_info) if is_foreach
|
91
130
|
#stmt_list << NativeStatement.new("}", :foreach)
|
92
|
-
#stmt_list << etag_stmt(
|
131
|
+
#stmt_list << etag_stmt(elem_info) if !is_foreach
|
93
132
|
|
94
133
|
when :while
|
95
|
-
wrap_element_with_native_stmt(
|
134
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "while (#{d_arg}) {", "}", :while)
|
96
135
|
#stmt_list << NativeStatement.new("while (#{d_arg}) {", :while)
|
97
|
-
#stmt_list << stag_stmt(
|
136
|
+
#stmt_list << stag_stmt(elem_info)
|
98
137
|
#stmt_list.concat(cont_stmts)
|
99
|
-
#stmt_list << etag_stmt(
|
138
|
+
#stmt_list << etag_stmt(elem_info)
|
100
139
|
#stmt_list << NativeStatement.new("}", :while)
|
101
140
|
|
102
141
|
when :loop
|
103
|
-
error_if_empty_tag(
|
104
|
-
wrap_content_with_native_stmt(
|
142
|
+
error_if_empty_tag(elem_info, d_str)
|
143
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, "while (#{d_arg}) {", "}", :while)
|
105
144
|
#stmt_list << stag_stmt
|
106
145
|
#stmt_list << NativeStatement.new("while (#{d_arg}) {", :while)
|
107
146
|
#stmt_list.concat(cont_stmts)
|
@@ -109,14 +148,14 @@ module Kwartz
|
|
109
148
|
#stmt_list << etag_stmt
|
110
149
|
|
111
150
|
when :set
|
112
|
-
wrap_element_with_native_stmt(
|
151
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "#{d_arg};", nil, :set)
|
113
152
|
#stmt_list << NativeStatement.new("#{d_arg};", :set)
|
114
153
|
#stmt_list << stag_stmt
|
115
154
|
#stmt_list.concat(cont_stmts)
|
116
155
|
#stmt_list << etag_stmt
|
117
156
|
|
118
157
|
when :if
|
119
|
-
wrap_element_with_native_stmt(
|
158
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "if (#{d_arg}) {", "}", :if)
|
120
159
|
#stmt_list << NativeStatement.new("if (#{d_arg}) {", :if)
|
121
160
|
#stmt_list << stag_stmt
|
122
161
|
#stmt_list.concat(cont_stmts)
|
@@ -124,11 +163,11 @@ module Kwartz
|
|
124
163
|
#stmt_list << NativeStatement.new("}", :if)
|
125
164
|
|
126
165
|
when :elsif, :else
|
127
|
-
error_when_last_stmt_is_not_if(
|
166
|
+
error_when_last_stmt_is_not_if(elem_info, d_str, stmt_list)
|
128
167
|
stmt_list.pop # delete '}'
|
129
168
|
kind = d_name == :else ? :else : :elseif
|
130
169
|
code = d_name == :else ? "} else {" : "} elsif (#{d_arg}) {"
|
131
|
-
wrap_element_with_native_stmt(
|
170
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "}", kind)
|
132
171
|
#stmt_list << NativeStatement.new(code, kind)
|
133
172
|
#stmt_list << stag_stmt
|
134
173
|
#stmt_list.concat(cont_stmts)
|
@@ -136,19 +175,19 @@ module Kwartz
|
|
136
175
|
#stmt_list << NativeStatement.new("}", kind)
|
137
176
|
|
138
177
|
when :default, :Default, :DEFAULT
|
139
|
-
error_if_empty_tag(
|
140
|
-
|
178
|
+
error_if_empty_tag(elem_info, d_str)
|
179
|
+
expr_str = directive.dattr == 'id' ? parse_expr_str(d_arg, e.stag_info.linenum) : d_arg
|
141
180
|
flag_escape = d_name == :default ? nil : (d_name == :Default)
|
142
|
-
add_native_expr_with_default(
|
143
|
-
"if (#{
|
144
|
-
#stmt_list << stag_stmt(
|
181
|
+
add_native_expr_with_default(elem_info, stmt_list, expr_str, flag_escape,
|
182
|
+
"if (#{expr_str}) {", "} else {", "}")
|
183
|
+
#stmt_list << stag_stmt(elem_info)
|
145
184
|
#stmt_list << NativeStatement.new_without_newline("if (#{d_arg}) {", :if)
|
146
185
|
#flag_escape = d_name == :default ? nil : (d_name == :Default)
|
147
186
|
#stmt_list << PrintStatement.new([ NativeExpression.new(d_arg, flag_escape) ])
|
148
187
|
#stmt_list << NativeStatement.new_without_newline("} else {", :else)
|
149
|
-
#stmt_list.concat(
|
188
|
+
#stmt_list.concat(elem_info.cont_stmts)
|
150
189
|
#stmt_list << NativeStatement.new_without_newline("}", :else)
|
151
|
-
#stmt_list << etag_stmt(
|
190
|
+
#stmt_list << etag_stmt(elem_info)
|
152
191
|
|
153
192
|
else
|
154
193
|
return false
|
@@ -168,6 +207,7 @@ module Kwartz
|
|
168
207
|
## translator for ePerl
|
169
208
|
##
|
170
209
|
class EperlTranslator < BaseTranslator
|
210
|
+
include EperlExpressionParser
|
171
211
|
|
172
212
|
|
173
213
|
EPERL_EMBED_PATTERNS = [
|
@@ -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
|
|
@@ -24,6 +24,7 @@ module Kwartz
|
|
24
24
|
## translator for Erubis
|
25
25
|
##
|
26
26
|
class ErubisTranslator < BaseTranslator
|
27
|
+
include RubyExpressionParser
|
27
28
|
|
28
29
|
|
29
30
|
ERUBIS_EMBED_PATTERNS = [
|
data/lib/kwartz/binding/eruby.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
|
|
@@ -27,6 +27,7 @@ module Kwartz
|
|
27
27
|
## translator for eRuby
|
28
28
|
##
|
29
29
|
class ErubyTranslator < BaseTranslator
|
30
|
+
include RubyExpressionParser
|
30
31
|
|
31
32
|
|
32
33
|
ERUBY_EMBED_PATTERNS = [
|
data/lib/kwartz/binding/jstl.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
|
|
@@ -14,10 +14,45 @@ module Kwartz
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
+
module JstlExpressionParser
|
18
|
+
|
19
|
+
|
20
|
+
def parse_expr_str(expr_str, linenum)
|
21
|
+
case expr_str
|
22
|
+
when /\A(\w+)\z/ # variable
|
23
|
+
expr = expr_str
|
24
|
+
when /\A(\w+)\.(\w+)\z/ # object.property
|
25
|
+
expr = expr_str
|
26
|
+
when /\A(\w+)\[('.*?'|".*?"|:\w+)\]\z/ # hash
|
27
|
+
key = $2[0] == ?: ? "'#{$2[1..-1]}'" : $2
|
28
|
+
expr = "#{$1}[#{key}]"
|
29
|
+
when /\A(\w+)\[(\w+)\]\z/ # array or hash
|
30
|
+
expr = "#{$1}[#{$2}]"
|
31
|
+
else
|
32
|
+
raise convert_error("'#{expr_str}': invalid expression.", linenum)
|
33
|
+
end
|
34
|
+
return expr
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def parse_expr_str!(expr_str)
|
39
|
+
begin
|
40
|
+
return parse_expr_str(expr_str, 0)
|
41
|
+
rescue
|
42
|
+
return expr_str
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
|
17
51
|
##
|
18
52
|
## directive handler for JSTL
|
19
53
|
##
|
20
54
|
class JstlHandler < Handler
|
55
|
+
include JstlExpressionParser
|
21
56
|
|
22
57
|
|
23
58
|
def initialize(elem_rulesets=[], properties={})
|
@@ -47,22 +82,22 @@ module Kwartz
|
|
47
82
|
end
|
48
83
|
|
49
84
|
|
50
|
-
def handle(
|
85
|
+
def handle(directive, elem_info, stmt_list)
|
51
86
|
ret = super
|
52
87
|
return ret if ret
|
53
88
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
89
|
+
d_name = directive.name
|
90
|
+
d_arg = directive.arg
|
91
|
+
d_str = directive.str
|
92
|
+
e = elem_info
|
58
93
|
|
59
94
|
case d_name
|
60
95
|
|
61
96
|
when :for, :For, :FOR, :list, :List, :LIST
|
62
97
|
is_foreach = d_name == :for || d_name == :For || d_name == :FOR
|
63
|
-
error_if_empty_tag(
|
98
|
+
error_if_empty_tag(elem_info, d_str) unless is_foreach
|
64
99
|
unless d_arg =~ /\A(\w+)\s*:\s*(.*)\z/
|
65
|
-
raise convert_error("'#{d_str}': invalid argument.",
|
100
|
+
raise convert_error("'#{d_str}': invalid argument.", elem_info.stag_info.linenum)
|
66
101
|
end
|
67
102
|
loopvar = $1 ; looplist = $2
|
68
103
|
counter = d_name == :for || d_name == :list ? nil : "#{loopvar}_ctr"
|
@@ -87,40 +122,40 @@ module Kwartz
|
|
87
122
|
end
|
88
123
|
end_code = "</c:forEach>"
|
89
124
|
if is_foreach
|
90
|
-
wrap_element_with_native_stmt(
|
125
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, end_code, :set)
|
91
126
|
else
|
92
|
-
wrap_content_with_native_stmt(
|
127
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, code, end_code, :set)
|
93
128
|
end
|
94
129
|
|
95
130
|
when :while, :loop
|
96
131
|
msg = "'#{d_str}': jstl doesn't support '#{d_arg}' directive."
|
97
|
-
raise convert_error(msg,
|
132
|
+
raise convert_error(msg, elem_info.stag_info.linenum)
|
98
133
|
|
99
134
|
when :set
|
100
135
|
unless d_arg =~ /\A(\S+)\s*=\s*(.*)\z/
|
101
|
-
raise convert_error("'#{d_str}': invalid argument.",
|
136
|
+
raise convert_error("'#{d_str}': invalid argument.", elem_info.stag_info.linenum)
|
102
137
|
end
|
103
138
|
lhs = $1; rhs = $2
|
104
139
|
code = "<c:set var=\"#{lhs}\" value=\"${#{rhs}}\"/>"
|
105
|
-
wrap_element_with_native_stmt(
|
140
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, nil, :set)
|
106
141
|
#code = "<c:set var=\"#{lhs}\" value=\"${#{rhs}}\"/>"
|
107
142
|
#stmt_list << NativeStatement.new(code, :set)
|
108
|
-
#stmt_list << stag_stmt(
|
143
|
+
#stmt_list << stag_stmt(elem_info)
|
109
144
|
#stmt_list.concat(cont_stmts)
|
110
|
-
#stmt_list << etag_stmt(
|
145
|
+
#stmt_list << etag_stmt(elem_info)
|
111
146
|
|
112
147
|
when :if
|
113
148
|
start_code = "<c:choose><c:when test=\"${#{d_arg}}\">"
|
114
149
|
end_code = "</c:when></c:choose>"
|
115
|
-
wrap_element_with_native_stmt(
|
150
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, start_code, end_code, :if)
|
116
151
|
#stmt_list << NativeStatement.new(start_code, :if)
|
117
|
-
#stmt_list << stag_stmt(
|
152
|
+
#stmt_list << stag_stmt(elem_info)
|
118
153
|
#stmt_list.concat(cont_stmts)
|
119
|
-
#stmt_list << etag_stmt(
|
154
|
+
#stmt_list << etag_stmt(elem_info)
|
120
155
|
#stmt_list << NativeStatement.new(end, :if)
|
121
156
|
|
122
157
|
when :elseif, :else
|
123
|
-
error_when_last_stmt_is_not_if(
|
158
|
+
error_when_last_stmt_is_not_if(elem_info, d_str, stmt_list)
|
124
159
|
stmt_list.pop # delete '</c:when></c:choose>'
|
125
160
|
if d_name == :else
|
126
161
|
kind = :else
|
@@ -131,7 +166,7 @@ module Kwartz
|
|
131
166
|
start_code = "</c:when><c:when test=\"${#{d_arg}}\">"
|
132
167
|
end_code = "</c:when></c:choose>"
|
133
168
|
end
|
134
|
-
wrap_element_with_native_stmt(
|
169
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, start_code, end_code, kind)
|
135
170
|
#stmt_list << NativeStatement.new(start_code, kind)
|
136
171
|
#stmt_list << stag_stmt
|
137
172
|
#stmt_list.concat(cont_stmts)
|
@@ -139,31 +174,32 @@ module Kwartz
|
|
139
174
|
#stmt_list << NativeStatement.new(end_code, kind)
|
140
175
|
|
141
176
|
when :default, :Default, :DEFAULT
|
142
|
-
error_if_empty_tag(
|
143
|
-
stmt_list << stag_stmt(
|
177
|
+
error_if_empty_tag(elem_info, d_str)
|
178
|
+
stmt_list << stag_stmt(elem_info)
|
144
179
|
flag_escape = d_name == :default ? nil : (d_name == :Default)
|
145
|
-
argstr =
|
146
|
-
|
180
|
+
argstr = elem_info.cont_stmts[0].args[0]
|
181
|
+
expr_str = directive.dattr == 'id' ? parse_expr_str(d_arg, e.stag_info.linenum) : d_arg
|
182
|
+
code = "<c:out value=\"${#{expr_str}}\""
|
147
183
|
code << " escapeXml=\"#{flag_escape}\"" unless flag_escape == nil
|
148
184
|
code << " default=\"#{argstr}\"/>"
|
149
185
|
stmt_list << NativeStatement.new_without_newline(code)
|
150
|
-
stmt_list << etag_stmt(
|
186
|
+
stmt_list << etag_stmt(elem_info)
|
151
187
|
|
152
188
|
when :catch
|
153
189
|
if d_arg && !d_arg.empty? && d_arg !~ /\A\w+\z/
|
154
|
-
raise convert_error("'#{d_str}': invalid varname.",
|
190
|
+
raise convert_error("'#{d_str}': invalid varname.", elem_info.stag_info.linenum)
|
155
191
|
end
|
156
192
|
code = "<c:catch"
|
157
193
|
code << " var=\"#{d_arg}\"" if d_arg && !d_arg.empty?
|
158
194
|
code << ">"
|
159
195
|
stmt_list << NativeStatement.new(code)
|
160
|
-
stmt_list.concat(
|
196
|
+
stmt_list.concat(elem_info.cont_stmts)
|
161
197
|
stmt_list << NativeStatement.new("</c:catch>")
|
162
198
|
|
163
199
|
when :forEach, :forTokens
|
164
200
|
options = eval "{ #{d_arg} }"
|
165
201
|
stag, etag = self.__send__ "handle_jstl_#{d_name}", options
|
166
|
-
wrap_element_with_native_stmt(
|
202
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, stag, etag, nil)
|
167
203
|
#stmt_list << NativeStatement.new(stag)
|
168
204
|
#stmt_list << stag_stmt
|
169
205
|
#stmt_list.concat(cont_stmts)
|
@@ -287,6 +323,7 @@ module Kwartz
|
|
287
323
|
## translator for php
|
288
324
|
##
|
289
325
|
class JstlTranslator < BaseTranslator
|
326
|
+
include JstlExpressionParser
|
290
327
|
|
291
328
|
|
292
329
|
JSTL11_EMBED_PATTERNS = [
|