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
@@ -0,0 +1,230 @@
|
|
1
|
+
###
|
2
|
+
### $Rev$
|
3
|
+
### $Release: 3.2.0 $
|
4
|
+
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
|
+
###
|
6
|
+
|
7
|
+
require 'kwartz/converter'
|
8
|
+
require 'kwartz/translator'
|
9
|
+
|
10
|
+
|
11
|
+
module Kwartz
|
12
|
+
|
13
|
+
|
14
|
+
module PerlExpressionParser
|
15
|
+
|
16
|
+
|
17
|
+
def parse_expr_str(expr_str, linenum)
|
18
|
+
case expr_str
|
19
|
+
when /\A(\w+)\z/ # variable
|
20
|
+
expr = '$'+$1
|
21
|
+
when /\A(\w+)\.(\w+)\z/ # object.property
|
22
|
+
expr = "$#{$1}->{#{$2}}"
|
23
|
+
when /\A(\w+)\[(.*?'|".*?"|:\w+)\]\z/ # hash
|
24
|
+
key = $2[0] == ?: ? "'#{$2[1..-1]}'" : $2
|
25
|
+
expr = "$#{$1}{#{key}}"
|
26
|
+
when /\A(\w+)\[(\w+)\]\z/ # array or hash
|
27
|
+
begin
|
28
|
+
expr = "$#{$1}[#{Integer($2)}]"
|
29
|
+
rescue ArgumentError
|
30
|
+
expr = "$#{$1}[$#{$2}]"
|
31
|
+
end
|
32
|
+
else
|
33
|
+
raise convert_error("'#{expr_str}': invalid expression.", linenum)
|
34
|
+
end
|
35
|
+
return expr
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def parse_expr_str!(expr_str)
|
40
|
+
begin
|
41
|
+
return parse_expr_str(expr_str, -1)
|
42
|
+
rescue
|
43
|
+
return expr_str
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
##
|
54
|
+
## directive handler for Perl
|
55
|
+
##
|
56
|
+
class PerlHandler < Handler
|
57
|
+
include PerlExpressionParser
|
58
|
+
|
59
|
+
|
60
|
+
PERL_DIRECTIVE_PATTERN = /\A(\w+)(?:\s*\(\s*(.*)\))?\z/
|
61
|
+
|
62
|
+
def directive_pattern
|
63
|
+
return PERL_DIRECTIVE_PATTERN
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
PERL_MAPPING_PATTERN = /\A'([-:\w]+)',\s*(.*)\z/
|
68
|
+
|
69
|
+
def mapping_pattern
|
70
|
+
return PERL_MAPPING_PATTERN
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
PERL_DIRECTIVE_FORMAT = '%s(%s)'
|
75
|
+
|
76
|
+
def directive_format
|
77
|
+
return PERL_DIRECTIVE_FORMAT
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
def handle(directive, elem_info, stmt_list)
|
82
|
+
ret = super
|
83
|
+
return ret if ret
|
84
|
+
|
85
|
+
d_name = directive.name
|
86
|
+
d_arg = directive.arg
|
87
|
+
d_str = directive.str
|
88
|
+
e = elem_info
|
89
|
+
|
90
|
+
case d_name
|
91
|
+
|
92
|
+
when :for, :For, :FOR, :list, :List, :LIST
|
93
|
+
unless d_arg =~ /\A(\w+)(?:,\s*(\w+))?\s+in\s+(.*)\z/ \
|
94
|
+
|| d_arg =~ /\A(\w+)(?:,(\w+))?\s*[:=]\s*(.*)\z/
|
95
|
+
raise convert_error("'#{d_str}': invalid argument.", e.stag_info.linenum)
|
96
|
+
end
|
97
|
+
loopvar = $1 ; loopval = $2 ; looplist = $3
|
98
|
+
is_foreach = d_name == :for || d_name == :For || d_name == :FOR
|
99
|
+
counter = d_name == :for || d_name == :list ? nil : "#{loopvar}_ctr"
|
100
|
+
toggle = d_name != :FOR && d_name != :LIST ? nil : "#{loopvar}_tgl"
|
101
|
+
foreach_code = loopval ? "#{looplist}.each do |#{loopvar}, #{loopval}|" \
|
102
|
+
: "for #{loopvar} in #{looplist} do"
|
103
|
+
code = []
|
104
|
+
code << "#{counter} = 0" if counter
|
105
|
+
code << foreach_code
|
106
|
+
code << " #{counter} += 1" if counter
|
107
|
+
code << " #{toggle} = #{counter}%2==0 ? #{@even} : #{@odd}" if toggle
|
108
|
+
if is_foreach
|
109
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "end", :foreach)
|
110
|
+
else
|
111
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, code, "end", :foreach)
|
112
|
+
end
|
113
|
+
|
114
|
+
when :while
|
115
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "while #{d_arg} do", "end", :while)
|
116
|
+
#stmt_list << NativeStatement.new("while #{d_arg} do", :while)
|
117
|
+
#stmt_list << stag_stmt(elem_info)
|
118
|
+
#stmt_list.concat(e.cont_stmts)
|
119
|
+
#stmt_list << etag_stmt(elem_info)
|
120
|
+
#stmt_list << NativeStatement.new("end", :while)
|
121
|
+
|
122
|
+
when :loop
|
123
|
+
error_if_empty_tag(elem_info, d_str)
|
124
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, "while #{d_arg} do", "end", :while)
|
125
|
+
#stmt_list << stag_stmt(elem_info)
|
126
|
+
#stmt_list << NativeStatement.new("while #{d_arg} do", :while)
|
127
|
+
#stmt_list.concat(e.cont_stmts)
|
128
|
+
#stmt_list << NativeStatement.new("end", :while)
|
129
|
+
#stmt_list << etag_stmt(elem_info)
|
130
|
+
|
131
|
+
when :set
|
132
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, d_arg, nil, :set)
|
133
|
+
#stmt_list << NativeStatement.new(d_arg, :set)
|
134
|
+
#stmt_list << stag_stmt(elem_info)
|
135
|
+
#stmt_list.concat(e.cont_stmts)
|
136
|
+
#stmt_list << etag_stmt(elem_info)
|
137
|
+
|
138
|
+
when :if
|
139
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "if #{d_arg} then", "end", :if)
|
140
|
+
#stmt_list << NativeStatement.new("if #{d_arg} then", :if)
|
141
|
+
#stmt_list << stag_stmt(elem_info)
|
142
|
+
#stmt_list.concat(e.cont_stmts)
|
143
|
+
#stmt_list << etag_stmt(elem_info)
|
144
|
+
#stmt_list << NativeStatement.new("end", :if)
|
145
|
+
|
146
|
+
when :elsif, :else
|
147
|
+
error_when_last_stmt_is_not_if(elem_info, d_str, stmt_list)
|
148
|
+
stmt_list.pop # delete 'end'
|
149
|
+
kind = d_name == :else ? :else : :elseif
|
150
|
+
code = d_name == :else ? "else" : "elsif #{d_arg} then"
|
151
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "end", kind)
|
152
|
+
#stmt_list << NativeStatement.new(code, kind)
|
153
|
+
#stmt_list << stag_stmt(elem_info)
|
154
|
+
#stmt_list.concat(e.cont_stmts)
|
155
|
+
#stmt_list << etag_stmt(elem_info)
|
156
|
+
#stmt_list << NativeStatement.new("end", kind)
|
157
|
+
|
158
|
+
when :default, :Default, :DEFAULT
|
159
|
+
error_if_empty_tag(elem_info, d_str)
|
160
|
+
expr_str = directive.dattr == 'id' ? parse_expr_str(d_arg, e.stag_info.linenum) : d_arg
|
161
|
+
flag_escape = d_name == :default ? nil : (d_name == :Default)
|
162
|
+
add_native_expr_with_default(elem_info, stmt_list, expr_str, flag_escape,
|
163
|
+
"if (#{expr_str}) && !(#{d_arg}).to_s.empty? then",
|
164
|
+
"else", "end")
|
165
|
+
#stmt_list << stag_stmt(elem_info)
|
166
|
+
#stmt_list << NativeStatement.new_without_newline("if (#{d_arg}) && !(#{d_arg}).to_s.empty? then", :if)
|
167
|
+
#flag_escape = d_name == :default ? nil : (d_name == :Default)
|
168
|
+
#stmt_list << PrintStatement.new([ NativeExpression.new(d_arg, flag_escape) ])
|
169
|
+
#stmt_list << NativeStatement.new_without_newline("else", :else)
|
170
|
+
#stmt_list.concat(e.cont_stmts)
|
171
|
+
#stmt_list << NativeStatement.new_without_newline("end", :else)
|
172
|
+
#stmt_list << etag_stmt(elem_info)
|
173
|
+
|
174
|
+
else
|
175
|
+
return false
|
176
|
+
|
177
|
+
end #case
|
178
|
+
return true
|
179
|
+
|
180
|
+
end #def
|
181
|
+
|
182
|
+
|
183
|
+
end #class
|
184
|
+
Handler.register_class('perl', PerlHandler)
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
##
|
189
|
+
## translator for Perl
|
190
|
+
##
|
191
|
+
class PerlTranslator < BaseTranslator
|
192
|
+
include PerlExpressionParser
|
193
|
+
|
194
|
+
|
195
|
+
def initialize(properties={})
|
196
|
+
escapefunc = properties[:escapefunc] || 'encode_entities'
|
197
|
+
marks = ['', '', 'push(@_buf, ', '); ', "push(@_buf, #{escapefunc}(", ')); ']
|
198
|
+
super(marks, properties)
|
199
|
+
@header = 'my @_buf = (); ' unless @header == false
|
200
|
+
@footer = "join('', @_buf);" + @nl unless @footer == false
|
201
|
+
end
|
202
|
+
|
203
|
+
|
204
|
+
def translate_string(str)
|
205
|
+
return if str.nil? || str.empty?
|
206
|
+
#str.gsub!(/['\\]/, '\\\\\&')
|
207
|
+
#@sb << "_buf << '#{str}'; "
|
208
|
+
str.gsub!(/[`\\]/, '\\\\\&')
|
209
|
+
@sb << "push(@_buf, q`#{str}`); "
|
210
|
+
#if str[-1] == ?\n
|
211
|
+
# str.chomp!
|
212
|
+
# @sb << "push(@_buf, q`#{str}`, #{@nl.inspect});" << @nl
|
213
|
+
#else
|
214
|
+
# @sb << "push(@_buf, q`#{str}`); "
|
215
|
+
#end
|
216
|
+
end
|
217
|
+
|
218
|
+
|
219
|
+
def translate(stmt_list)
|
220
|
+
stmt_list2 = optimize_print_stmts(stmt_list)
|
221
|
+
return super(stmt_list2)
|
222
|
+
end
|
223
|
+
|
224
|
+
|
225
|
+
end #class
|
226
|
+
Translator.register_class('perl', PerlTranslator)
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
end #module
|
data/lib/kwartz/binding/php.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 PhpExpressionParser
|
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
|
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, 0)
|
45
|
+
rescue
|
46
|
+
return expr_str
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
17
55
|
##
|
18
56
|
## directive handler for PHP
|
19
57
|
##
|
20
58
|
class PhpHandler < Handler
|
59
|
+
include PhpExpressionParser
|
21
60
|
|
22
61
|
|
23
62
|
PHP_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.*\s+as\s+(\$\w+)(?:\s*=>\s*\$\w+)?\z/
|
58
|
-
raise convert_error("'#{d_str}': invalid argument.",
|
97
|
+
raise convert_error("'#{d_str}': invalid argument.", elem_info.stag_info.linenum)
|
59
98
|
end
|
60
99
|
loopvar = $1
|
61
100
|
counter = d_name == :foreach || d_name == :list ? nil : "#{loopvar}_ctr"
|
@@ -66,23 +105,23 @@ module Kwartz
|
|
66
105
|
code << " #{counter}++;" if counter
|
67
106
|
code << " #{toggle} = #{counter}%2==0 ? #{@even} : #{@odd};" if toggle
|
68
107
|
if is_foreach
|
69
|
-
wrap_element_with_native_stmt(
|
108
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "}", :foeach)
|
70
109
|
else
|
71
|
-
wrap_content_with_native_stmt(
|
110
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, code, "}", :foeach)
|
72
111
|
end
|
73
|
-
#stmt_list << stag_stmt(
|
112
|
+
#stmt_list << stag_stmt(elem_info) if !is_foreach
|
74
113
|
#stmt_list << NativeStatement.new("#{counter} = 0;") if counter
|
75
114
|
#stmt_list << NativeStatement.new("foreach (#{d_arg}) {", :foreach)
|
76
115
|
#stmt_list << NativeStatement.new(" #{counter}++;") if counter
|
77
116
|
#stmt_list << NativeStatement.new(" #{toggle} = #{counter}%2==0 ? #{self.even} : #{self.odd};") if toggle
|
78
|
-
#stmt_list << stag_stmt(
|
79
|
-
#stmt_list.concat(
|
80
|
-
#stmt_list << etag_stmt(
|
117
|
+
#stmt_list << stag_stmt(elem_info) if is_foreach
|
118
|
+
#stmt_list.concat(elem_info.cont_stmts)
|
119
|
+
#stmt_list << etag_stmt(elem_info) if is_foreach
|
81
120
|
#stmt_list << NativeStatement.new("}", :foreach)
|
82
|
-
#stmt_list << etag_stmt(
|
121
|
+
#stmt_list << etag_stmt(elem_info) if !is_foreach
|
83
122
|
|
84
123
|
when :while
|
85
|
-
wrap_element_with_native_stmt(
|
124
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "while (#{d_arg}) {", "}", :while)
|
86
125
|
#stmt_list << NativeStatement.new("while (#{d_arg}) {", :while)
|
87
126
|
#stmt_list << stag_stmt
|
88
127
|
#stmt_list.concat(cont_stmts)
|
@@ -90,8 +129,8 @@ module Kwartz
|
|
90
129
|
#stmt_list << NativeStatement.new("}", :while)
|
91
130
|
|
92
131
|
when :loop
|
93
|
-
error_if_empty_tag(
|
94
|
-
wrap_content_with_native_stmt(
|
132
|
+
error_if_empty_tag(elem_info, d_str)
|
133
|
+
wrap_content_with_native_stmt(elem_info, stmt_list, "while (#{d_arg}) {", "}", :while)
|
95
134
|
#stmt_list << stag_stmt
|
96
135
|
#stmt_list << NativeStatement.new("while (#{d_arg}) {", :while)
|
97
136
|
#stmt_list.concat(cont_stmts)
|
@@ -99,14 +138,14 @@ module Kwartz
|
|
99
138
|
#stmt_list << etag_stmt
|
100
139
|
|
101
140
|
when :set
|
102
|
-
wrap_element_with_native_stmt(
|
141
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "#{d_arg};", nil, :set)
|
103
142
|
#stmt_list << NativeStatement.new("#{d_arg};", :set)
|
104
143
|
#stmt_list << stag_stmt
|
105
144
|
#stmt_list.concat(cont_stmts)
|
106
145
|
#stmt_list << etag_stmt
|
107
146
|
|
108
147
|
when :if
|
109
|
-
wrap_element_with_native_stmt(
|
148
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, "if (#{d_arg}) {", "}", :if)
|
110
149
|
#stmt_list << NativeStatement.new("if (#{d_arg}) {", :if)
|
111
150
|
#stmt_list << stag_stmt
|
112
151
|
#stmt_list.concat(cont_stmts)
|
@@ -114,11 +153,11 @@ module Kwartz
|
|
114
153
|
#stmt_list << NativeStatement.new("}", :if)
|
115
154
|
|
116
155
|
when :elseif, :else
|
117
|
-
error_when_last_stmt_is_not_if(
|
156
|
+
error_when_last_stmt_is_not_if(elem_info, d_str, stmt_list)
|
118
157
|
stmt_list.pop # delete '}'
|
119
158
|
kind = d_name == :else ? :else : :elseif
|
120
159
|
code = d_name == :else ? "} else {" : "} elseif (#{d_arg}) {"
|
121
|
-
wrap_element_with_native_stmt(
|
160
|
+
wrap_element_with_native_stmt(elem_info, stmt_list, code, "}", kind)
|
122
161
|
#stmt_list << NativeStatement.new(code, kind)
|
123
162
|
#stmt_list << stag_stmt
|
124
163
|
#stmt_list.concat(cont_stmts)
|
@@ -126,19 +165,19 @@ module Kwartz
|
|
126
165
|
#stmt_list << NativeStatement.new("}", kind)
|
127
166
|
|
128
167
|
when :default, :Default, :DEFAULT
|
129
|
-
error_if_empty_tag(
|
130
|
-
|
168
|
+
error_if_empty_tag(elem_info, d_str)
|
169
|
+
expr_str = directive.dattr == 'id' ? parse_expr_str(d_arg, e.stag_info.linenum) : d_arg
|
131
170
|
flag_escape = d_name == :default ? nil : (d_name == :Default)
|
132
|
-
add_native_expr_with_default(
|
133
|
-
"if (#{
|
134
|
-
#stmt_list << stag_stmt(
|
171
|
+
add_native_expr_with_default(elem_info, stmt_list, expr_str, flag_escape,
|
172
|
+
"if (#{expr_str}) {", "} else {", "}")
|
173
|
+
#stmt_list << stag_stmt(elem_info)
|
135
174
|
#stmt_list << NativeStatement.new_without_newline("if (#{d_arg}) {", :if)
|
136
175
|
#flag_escape = d_name == :default ? nil : (d_name == :Default)
|
137
176
|
#stmt_list << PrintStatement.new([ NativeExpression.new(d_arg, flag_escape) ])
|
138
177
|
#stmt_list << NativeStatement.new_without_newline("} else {", :else)
|
139
|
-
#stmt_list.concat(
|
178
|
+
#stmt_list.concat(elem_info.cont_stmts)
|
140
179
|
#stmt_list << NativeStatement.new_without_newline("}", :else)
|
141
|
-
#stmt_list << etag_stmt(
|
180
|
+
#stmt_list << etag_stmt(elem_info)
|
142
181
|
|
143
182
|
else
|
144
183
|
return false
|
@@ -158,6 +197,7 @@ module Kwartz
|
|
158
197
|
## translator for php
|
159
198
|
##
|
160
199
|
class PhpTranslator < BaseTranslator
|
200
|
+
include PhpExpressionParser
|
161
201
|
|
162
202
|
|
163
203
|
PHP_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 PIErubisTranslator < BaseTranslator
|
27
|
+
include RubyExpressionParser
|
27
28
|
|
28
29
|
|
29
30
|
PIERUBIS_EMBED_PATTERNS = [
|
data/lib/kwartz/binding/rails.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
|
|
@@ -93,15 +93,15 @@ module Kwartz
|
|
93
93
|
##
|
94
94
|
## everytime return true whenever directive name is unknown.
|
95
95
|
##
|
96
|
-
def handle(
|
96
|
+
def handle(directive, elem_info, stmt_list)
|
97
97
|
ret = super
|
98
98
|
return ret if ret
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
attr_info =
|
100
|
+
d_name = directive.name
|
101
|
+
d_arg = directive.arg
|
102
|
+
d_str = directive.str
|
103
|
+
e = elem_info
|
104
|
+
attr_info = e.attr_info
|
105
105
|
|
106
106
|
## parse 'name="user[name]"' or 'id="user_name"'
|
107
107
|
case d_name.to_s
|
@@ -126,13 +126,13 @@ module Kwartz
|
|
126
126
|
add_directive_integer_option(d_arg, 'size', attr_info['size'])
|
127
127
|
|
128
128
|
when :link_to, :link_to_remote, :link_to_unless_current
|
129
|
-
add_directive_content_as_arg(d_arg,
|
129
|
+
add_directive_content_as_arg(d_arg, elem_info.cont_stmts)
|
130
130
|
|
131
131
|
when :anchor, :anchor_remote
|
132
132
|
replace_elem = false
|
133
133
|
|
134
134
|
when :mail_to
|
135
|
-
add_directive_content_as_arg(d_arg,
|
135
|
+
add_directive_content_as_arg(d_arg, elem_info.cont_stmts)
|
136
136
|
add_directive_attr_as_arg(d_arg, attr_info, 'href')
|
137
137
|
d_arg.sub!(/\A\'mailto:/, "'")
|
138
138
|
|
@@ -170,7 +170,7 @@ module Kwartz
|
|
170
170
|
end #case
|
171
171
|
|
172
172
|
##
|
173
|
-
print_directive(stmt_list,
|
173
|
+
print_directive(elem_info, stmt_list, d_name, d_arg, replace_elem)
|
174
174
|
|
175
175
|
return true # everytime return true
|
176
176
|
|
@@ -251,18 +251,17 @@ module Kwartz
|
|
251
251
|
end
|
252
252
|
|
253
253
|
|
254
|
-
def print_directive(stmt_list,
|
255
|
-
|
256
|
-
|
257
|
-
tail_space = (arg.etag_info || arg.stag_info).tail_space
|
254
|
+
def print_directive(elem_info, stmt_list, directive_name, directive_arg, replace_elem=true)
|
255
|
+
head_space = elem_info.stag_info.head_space
|
256
|
+
tail_space = (elem_info.etag_info || elem_info.stag_info).tail_space
|
258
257
|
pargs = []
|
259
258
|
pargs << head_space if head_space
|
260
|
-
pargs << NativeExpression.new("#{
|
259
|
+
pargs << NativeExpression.new("#{directive_name} #{directive_arg}")
|
261
260
|
pargs << tail_space if tail_space
|
262
261
|
stmt_list << PrintStatement.new(pargs)
|
263
262
|
unless replace_elem
|
264
|
-
stmt_list.concat(
|
265
|
-
stmt_list << PrintStatement.new([
|
263
|
+
stmt_list.concat(elem_info.cont_stmts)
|
264
|
+
stmt_list << PrintStatement.new([elem_info.etag_info.tag_text])
|
266
265
|
end
|
267
266
|
end
|
268
267
|
|
@@ -276,6 +275,7 @@ module Kwartz
|
|
276
275
|
## translator for rails
|
277
276
|
##
|
278
277
|
class RailsTranslator < BaseTranslator
|
278
|
+
include RubyExpressionParser
|
279
279
|
|
280
280
|
|
281
281
|
RAILS_EMBED_PATTERNS = [
|