kwartz 3.0.0 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +36 -1
- data/LGPL +504 -0
- data/README.txt +16 -2
- data/bin/kwartz +1 -1
- data/doc-api/classes/Kwartz.html +47 -1
- 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 +42 -42
- data/doc-api/classes/Kwartz/BaseError.html +12 -12
- data/doc-api/classes/Kwartz/BaseTranslator.html +210 -43
- 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 +49 -49
- data/doc-api/classes/Kwartz/Config.html +6 -1
- data/doc-api/classes/Kwartz/ConvertError.html +14 -14
- data/doc-api/classes/Kwartz/Converter.html +31 -30
- data/doc-api/classes/Kwartz/CssStyleParser.html +79 -57
- data/doc-api/classes/Kwartz/Defun.html +313 -0
- data/doc-api/classes/Kwartz/DocumentRuleset.html +58 -58
- data/doc-api/classes/Kwartz/ElementExpander.html +32 -32
- data/doc-api/classes/Kwartz/ElementInfo.html +29 -29
- data/doc-api/classes/Kwartz/ElementRuleset.html +126 -96
- data/doc-api/classes/Kwartz/EperlHandler.html +108 -84
- data/doc-api/classes/Kwartz/EperlTranslator.html +7 -7
- data/doc-api/classes/Kwartz/ErubisHandler.html +2 -2
- data/doc-api/classes/Kwartz/ErubisTranslator.html +8 -8
- data/doc-api/classes/Kwartz/ErubyHandler.html +2 -220
- data/doc-api/classes/Kwartz/ErubyTranslator.html +7 -7
- data/doc-api/classes/Kwartz/ExpandStatement.html +20 -20
- data/doc-api/classes/Kwartz/Handler.html +122 -117
- data/doc-api/classes/Kwartz/HandlerArgument.html +215 -0
- data/doc-api/classes/Kwartz/Helper.html +112 -0
- data/doc-api/classes/Kwartz/Helper/ActionViewHelper.html +221 -0
- data/doc-api/classes/Kwartz/Helper/RailsTemplate.html +630 -0
- data/doc-api/classes/Kwartz/JstlHandler.html +208 -193
- data/doc-api/classes/Kwartz/JstlTranslator.html +15 -15
- data/doc-api/classes/Kwartz/KwartzError.html +6 -6
- data/doc-api/classes/Kwartz/Main.html +39 -23
- data/doc-api/classes/Kwartz/NativeExpression.html +18 -18
- data/doc-api/classes/Kwartz/NativeStatement.html +25 -25
- data/doc-api/classes/Kwartz/Node.html +6 -6
- data/doc-api/classes/Kwartz/PIErubisHandler.html +113 -0
- data/doc-api/classes/Kwartz/PIErubisTranslator.html +200 -0
- data/doc-api/classes/Kwartz/ParseError.html +6 -6
- data/doc-api/classes/Kwartz/PhpHandler.html +102 -83
- data/doc-api/classes/Kwartz/PhpTranslator.html +14 -14
- data/doc-api/classes/Kwartz/PresentationLogicParser.html +136 -128
- data/doc-api/classes/Kwartz/PrintStatement.html +19 -19
- data/doc-api/classes/Kwartz/RailsHandler.html +121 -118
- data/doc-api/classes/Kwartz/RailsTranslator.html +7 -7
- data/doc-api/classes/Kwartz/RubyHandler.html +349 -0
- data/doc-api/classes/Kwartz/RubyStyleParser.html +85 -85
- data/doc-api/classes/Kwartz/RubyTranslator.html +218 -0
- data/doc-api/classes/Kwartz/StatementHelper.html +479 -0
- data/doc-api/classes/Kwartz/StrutsTranslator.html +12 -12
- data/doc-api/classes/Kwartz/TagInfo.html +28 -28
- data/doc-api/classes/Kwartz/TextConverter.html +28 -28
- data/doc-api/classes/Kwartz/Translator.html +42 -42
- data/doc-api/classes/Kwartz/Util.html +284 -0
- data/doc-api/created.rid +1 -1
- data/doc-api/files/__/README_txt.html +30 -3
- data/doc-api/files/kwartz/assert_rb.html +1 -1
- data/doc-api/files/kwartz/binding/eperl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/erubis_rb.html +3 -3
- data/doc-api/files/kwartz/binding/eruby_rb.html +3 -2
- data/doc-api/files/kwartz/binding/jstl_rb.html +2 -2
- data/doc-api/files/kwartz/binding/php_rb.html +2 -2
- data/doc-api/files/kwartz/binding/pierubis_rb.html +116 -0
- data/doc-api/files/kwartz/binding/rails_rb.html +2 -2
- data/doc-api/files/kwartz/binding/ruby_rb.html +115 -0
- data/doc-api/files/kwartz/binding/struts_rb.html +1 -1
- data/doc-api/files/kwartz/config_rb.html +2 -2
- data/doc-api/files/kwartz/converter_rb.html +3 -2
- data/doc-api/files/kwartz/defun_rb.html +116 -0
- data/doc-api/files/kwartz/error_rb.html +1 -1
- data/doc-api/files/kwartz/helper/rails_rb.html +123 -0
- data/doc-api/files/kwartz/main_rb.html +5 -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 +1 -1
- data/doc-api/files/kwartz/util/testcase-helper_rb.html +2 -2
- data/doc-api/files/kwartz/util_rb.html +107 -0
- data/doc-api/files/kwartz_rb.html +3 -2
- data/doc-api/fr_class_index.html +11 -0
- data/doc-api/fr_file_index.html +5 -0
- data/doc-api/fr_method_index.html +242 -190
- data/doc/p-pattern.html +94 -94
- data/doc/reference.html +847 -612
- data/doc/users-guide.html +744 -241
- data/examples/rails1/README +2 -2
- data/examples/rails1/application_helper.rb +2 -27
- data/examples/rails1/link_to.plogic +5 -5
- data/examples/rails1/list.plogic +2 -2
- data/examples/rails2/app/controllers/application.rb +14 -0
- data/examples/rails2/app/controllers/groups_controller.rb +47 -0
- data/examples/rails2/app/controllers/members_controller.rb +56 -0
- data/examples/rails2/app/helpers/application_helper.rb +6 -0
- data/examples/rails2/app/helpers/groups_helper.rb +2 -0
- data/examples/rails2/app/helpers/members_helper.rb +2 -0
- data/examples/rails2/app/models/group.rb +2 -0
- data/examples/rails2/app/models/member.rb +3 -0
- data/examples/rails2/app/views/groups/_form.html +30 -0
- data/examples/rails2/app/views/groups/_form.plogic +11 -0
- data/examples/rails2/app/views/groups/_link.plogic +19 -0
- data/examples/rails2/app/views/groups/_read.plogic +7 -0
- data/examples/rails2/app/views/groups/edit.cfg.yaml +2 -0
- data/examples/rails2/app/views/groups/edit.html +26 -0
- data/examples/rails2/app/views/groups/edit.plogic +9 -0
- data/examples/rails2/app/views/groups/list.html +48 -0
- data/examples/rails2/app/views/groups/list.plogic +32 -0
- data/examples/rails2/app/views/groups/new.cfg.yaml +2 -0
- data/examples/rails2/app/views/groups/new.html +27 -0
- data/examples/rails2/app/views/groups/new.plogic +9 -0
- data/examples/rails2/app/views/groups/show.html +27 -0
- data/examples/rails2/app/views/groups/show.plogic +2 -0
- data/examples/rails2/app/views/layouts/groups.html +23 -0
- data/examples/rails2/app/views/layouts/groups.plogic +11 -0
- data/examples/rails2/app/views/layouts/members.html +23 -0
- data/examples/rails2/app/views/layouts/members.plogic +11 -0
- data/examples/rails2/app/views/layouts/members2.html +24 -0
- data/examples/rails2/app/views/layouts/members2.plogic +11 -0
- data/examples/rails2/app/views/members/_form.plogic +27 -0
- data/examples/rails2/app/views/members/_link.plogic +19 -0
- data/examples/rails2/app/views/members/_read.plogic +29 -0
- data/examples/rails2/app/views/members/edit.cfg.yaml +6 -0
- data/examples/rails2/app/views/members/edit.html +27 -0
- data/examples/rails2/app/views/members/edit.plogic +10 -0
- data/examples/rails2/app/views/members/list.html +53 -0
- data/examples/rails2/app/views/members/list.plogic +32 -0
- data/examples/rails2/app/views/members/new.html +61 -0
- data/examples/rails2/app/views/members/new.plogic +17 -0
- data/examples/rails2/app/views/members/show.html +41 -0
- data/examples/rails2/app/views/members/show.plogic +3 -0
- data/examples/rails2/db/create-tables.mysql.sql +27 -0
- data/examples/rails2/db/create-tables.pgsql.sql +27 -0
- data/examples/rails2/db/insert-data.sql +21 -0
- data/examples/rails2/db/tabledef.yaml +51 -0
- data/kwartz.gemspec +4 -4
- data/lib/kwartz.rb +10 -2
- data/lib/kwartz/assert.rb +1 -1
- data/lib/kwartz/binding/eperl.rb +85 -61
- data/lib/kwartz/binding/erubis.rb +6 -8
- data/lib/kwartz/binding/eruby.rb +5 -120
- data/lib/kwartz/binding/jstl.rb +116 -101
- data/lib/kwartz/binding/php.rb +79 -60
- data/lib/kwartz/binding/pierubis.rb +58 -0
- data/lib/kwartz/binding/rails.rb +45 -42
- data/lib/kwartz/binding/ruby.rb +193 -0
- data/lib/kwartz/binding/struts.rb +1 -1
- data/lib/kwartz/config.rb +4 -3
- data/lib/kwartz/converter.rb +231 -68
- data/lib/kwartz/defun.rb +126 -0
- data/lib/kwartz/error.rb +1 -1
- data/lib/kwartz/helper/rails.rb +437 -0
- data/lib/kwartz/main.rb +30 -38
- data/lib/kwartz/node.rb +46 -31
- data/lib/kwartz/parser.rb +43 -15
- data/lib/kwartz/translator.rb +104 -6
- data/lib/kwartz/util.rb +113 -0
- data/lib/kwartz/util/assert-text-equal.rb +1 -1
- data/lib/kwartz/util/testcase-helper.rb +26 -8
- data/test/test-compile.rb +3 -3
- data/test/test-compile.yaml +135 -5
- data/test/test-converter.rb +16 -8
- data/test/test-converter.yaml +307 -76
- data/test/test-directives.rb +1 -1
- data/test/test-directives.yaml +964 -979
- data/test/test-main.rb +61 -146
- data/test/test-main.yaml +235 -0
- data/test/test-parser.rb +10 -12
- data/test/test-parser.yaml +484 -326
- data/test/test-rails.rb +1 -1
- data/test/test-rails.yaml +37 -37
- data/test/test-ruleset.rb +1 -1
- data/test/test-ruleset.yaml +34 -40
- data/test/test.rb +1 -1
- metadata +82 -3
- data/COPYING +0 -340
data/lib/kwartz/converter.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
###
|
2
|
-
### $Rev:
|
3
|
-
### $Release: 3.
|
2
|
+
### $Rev: 135 $
|
3
|
+
### $Release: 3.1.0 $
|
4
4
|
### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
|
5
5
|
###
|
6
6
|
|
@@ -10,6 +10,7 @@ require 'kwartz/assert'
|
|
10
10
|
require 'kwartz/error'
|
11
11
|
require 'kwartz/node'
|
12
12
|
require 'kwartz/config'
|
13
|
+
require 'kwartz/util'
|
13
14
|
|
14
15
|
require 'abstract'
|
15
16
|
|
@@ -168,7 +169,7 @@ module Kwartz
|
|
168
169
|
|
169
170
|
|
170
171
|
def merged?
|
171
|
-
|
172
|
+
!@merged.nil?
|
172
173
|
end
|
173
174
|
|
174
175
|
|
@@ -226,7 +227,7 @@ module Kwartz
|
|
226
227
|
|
227
228
|
## set @despan and @dattr
|
228
229
|
def include_properties(properties)
|
229
|
-
@dattr = properties[:dattr] || Config::PROPERTY_DATTR # default: '
|
230
|
+
@dattr = properties[:dattr] || Config::PROPERTY_DATTR # default: 'kw:d'
|
230
231
|
@delspan = properties.key?(:delspan) ? properties[:delspan] : Config::PROPERTY_DELSPAN # delete dummy <span> tag or not
|
231
232
|
end
|
232
233
|
|
@@ -238,17 +239,50 @@ module Kwartz
|
|
238
239
|
|
239
240
|
|
240
241
|
## raise errror if etag_info is null
|
241
|
-
def error_if_empty_tag(
|
242
|
-
|
243
|
-
|
242
|
+
def error_if_empty_tag(handler_arg)
|
243
|
+
arg = handler_arg
|
244
|
+
unless arg.etag_info
|
245
|
+
d_name = arg.directive_name
|
246
|
+
d_str = arg.directive_str
|
247
|
+
msg = "'#{d_str}': #{d_name} directive is not available with empty tag."
|
248
|
+
raise convert_error(msg, arg.stag_info.linenum)
|
244
249
|
end
|
245
250
|
end
|
246
251
|
|
247
252
|
|
253
|
+
def error_when_last_stmt_is_not_if(stmt_list, handler_arg)
|
254
|
+
kind = _last_stmt_kind(stmt_list)
|
255
|
+
unless kind == :if || kind == :elseif
|
256
|
+
d_str = handler_arg.directive_str
|
257
|
+
linenum = handler_arg.stag_info.linenum
|
258
|
+
msg = "'#{d_str}': previous statement should be 'if' or 'elsif'."
|
259
|
+
raise convert_error(msg, linenum)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
|
264
|
+
#private
|
265
|
+
|
266
|
+
|
267
|
+
def _last_stmt_kind(stmt_list)
|
268
|
+
return nil if stmt_list.nil? || stmt_list.empty?
|
269
|
+
stmt = stmt_list.last
|
270
|
+
return nil unless stmt.is_a?(NativeStatement)
|
271
|
+
return stmt.kind
|
272
|
+
end
|
273
|
+
|
274
|
+
|
275
|
+
end
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
module StatementHelper
|
280
|
+
|
281
|
+
|
248
282
|
## create print statement from text
|
249
283
|
def create_text_print_stmt(text)
|
250
284
|
return PrintStatement.new([text])
|
251
|
-
#return
|
285
|
+
#return PritnStatement.new([TextExpression.new(text)])
|
252
286
|
end
|
253
287
|
|
254
288
|
|
@@ -311,12 +345,84 @@ module Kwartz
|
|
311
345
|
end
|
312
346
|
|
313
347
|
|
348
|
+
## build print statement of start-tag
|
349
|
+
def stag_stmt(handler_arg)
|
350
|
+
arg = handler_arg
|
351
|
+
return build_print_stmt(arg.stag_info, arg.attr_info, arg.append_exprs)
|
352
|
+
end
|
353
|
+
|
354
|
+
|
355
|
+
## build print statemetn of end-tag
|
356
|
+
def etag_stmt(handler_arg)
|
357
|
+
arg = handler_arg
|
358
|
+
return build_print_stmt(arg.etag_info, nil, nil)
|
359
|
+
end
|
360
|
+
|
361
|
+
|
362
|
+
def add_native_code(stmt_list, code, kind)
|
363
|
+
if code.is_a?(String)
|
364
|
+
stmt_list << NativeStatement.new(code, kind)
|
365
|
+
elsif code.is_a?(Array)
|
366
|
+
stmt_list.concat(code.collect {|line| NativeStatement.new(line, kind)})
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
|
371
|
+
def wrap_element_with_native_stmt(stmt_list, handler_arg, start_code, end_code, kind=nil)
|
372
|
+
add_native_code(stmt_list, start_code, kind)
|
373
|
+
stmt_list << stag_stmt(handler_arg)
|
374
|
+
stmt_list.concat(handler_arg.cont_stmts)
|
375
|
+
stmt_list << etag_stmt(handler_arg)
|
376
|
+
add_native_code(stmt_list, end_code, kind)
|
377
|
+
end
|
378
|
+
|
379
|
+
|
380
|
+
def wrap_content_with_native_stmt(stmt_list, handler_arg, start_code, end_code, kind=nil)
|
381
|
+
stmt_list << stag_stmt(handler_arg)
|
382
|
+
add_native_code(stmt_list, start_code, kind)
|
383
|
+
stmt_list.concat(handler_arg.cont_stmts)
|
384
|
+
add_native_code(stmt_list, end_code, kind)
|
385
|
+
stmt_list << etag_stmt(handler_arg)
|
386
|
+
end
|
387
|
+
|
388
|
+
|
389
|
+
def add_foreach_stmts(stmt_list, handler_arg, foreach_code, endforeach_code,
|
390
|
+
content_only, counter, toggle, init_code, incr_code, toggle_code)
|
391
|
+
arg = handler_arg
|
392
|
+
stmt_list << stag_stmt(arg) if content_only
|
393
|
+
start_code.split(/\n/).each do |code|
|
394
|
+
stmt_list << NativeStatement.new(code, kind)
|
395
|
+
end if start_code
|
396
|
+
stmt_list << stag_stmt(arg) if !content_only
|
397
|
+
stmt_list.concat(arg.cont_stmts)
|
398
|
+
stmt_list << etag_stmt(arg) if !content_only
|
399
|
+
end_code.split(/\n/).each do |code|
|
400
|
+
stmt_list << NativeStatement.new(code, kind)
|
401
|
+
end
|
402
|
+
stmt_list << etag_stmt(arg) if content_only
|
403
|
+
end
|
404
|
+
|
405
|
+
|
406
|
+
def add_native_expr_with_default(stmt_list, handler_arg,
|
407
|
+
expr_code, flag_escape,
|
408
|
+
if_code, else_code, endif_code)
|
409
|
+
arg = handler_arg
|
410
|
+
stmt_list << stag_stmt(arg)
|
411
|
+
stmt_list << NativeStatement.new_without_newline(if_code, :if)
|
412
|
+
stmt_list << PrintStatement.new([ NativeExpression.new(expr_code, flag_escape) ])
|
413
|
+
stmt_list << NativeStatement.new_without_newline(else_code, :else)
|
414
|
+
stmt_list.concat(arg.cont_stmts)
|
415
|
+
stmt_list << NativeStatement.new_without_newline(endif_code, :else)
|
416
|
+
stmt_list << etag_stmt(arg)
|
417
|
+
end
|
418
|
+
|
419
|
+
|
314
420
|
end
|
315
421
|
|
316
422
|
|
317
423
|
|
318
424
|
##
|
319
|
-
##
|
425
|
+
## (abstract) expand ExpandStatement and ElementInfo
|
320
426
|
##
|
321
427
|
## Handler class includes this module.
|
322
428
|
##
|
@@ -324,13 +430,13 @@ module Kwartz
|
|
324
430
|
include Assertion
|
325
431
|
|
326
432
|
|
327
|
-
##
|
433
|
+
## (abstract) get ElementRuleset
|
328
434
|
def get_element_ruleset(name)
|
329
435
|
not_implemented
|
330
436
|
end
|
331
437
|
|
332
438
|
|
333
|
-
##
|
439
|
+
## (abstract) get ElementInfo
|
334
440
|
def get_element_info(name)
|
335
441
|
not_implemented
|
336
442
|
end
|
@@ -437,11 +543,40 @@ module Kwartz
|
|
437
543
|
|
438
544
|
|
439
545
|
##
|
440
|
-
##
|
546
|
+
## argument data for handler
|
547
|
+
##
|
548
|
+
class HandlerArgument
|
549
|
+
include StatementHelper
|
550
|
+
|
551
|
+
|
552
|
+
def initialize(directive_name, directive_arg, directive_str,
|
553
|
+
stag_info, etag_info, cont_stmts, attr_info, append_exprs)
|
554
|
+
@directive_name = directive_name
|
555
|
+
@directive_arg = directive_arg
|
556
|
+
@directive_str = directive_str
|
557
|
+
@stag_info = stag_info
|
558
|
+
@etag_info = etag_info
|
559
|
+
@cont_stmts = cont_stmts
|
560
|
+
@attr_info = attr_info
|
561
|
+
@append_exprs = append_exprs
|
562
|
+
end
|
563
|
+
|
564
|
+
|
565
|
+
attr_reader :directive_name, :directive_arg, :directive_str
|
566
|
+
attr_reader :stag_info, :etag_info, :cont_stmts, :attr_info, :append_exprs
|
567
|
+
|
568
|
+
|
569
|
+
end
|
570
|
+
|
571
|
+
|
572
|
+
|
573
|
+
##
|
574
|
+
## (abstract) handle directives
|
441
575
|
##
|
442
576
|
class Handler
|
443
577
|
include Assertion
|
444
578
|
include ConverterHelper
|
579
|
+
include StatementHelper
|
445
580
|
include ElementExpander
|
446
581
|
|
447
582
|
|
@@ -460,33 +595,52 @@ module Kwartz
|
|
460
595
|
|
461
596
|
|
462
597
|
def get_element_ruleset(name) # for ElementExpander module and Converter class
|
463
|
-
@elem_ruleset_table[name]
|
598
|
+
return @elem_ruleset_table[name]
|
464
599
|
end
|
465
600
|
|
466
601
|
|
467
602
|
def get_element_info(name) # for ElementExpander module
|
468
|
-
@elem_info_table[name]
|
603
|
+
return @elem_info_table[name]
|
604
|
+
end
|
605
|
+
|
606
|
+
|
607
|
+
def _elem_info_table # :nodoc:
|
608
|
+
return @elem_info_table
|
609
|
+
end
|
610
|
+
|
611
|
+
|
612
|
+
def _import_element_info_from_handler(handler, names=nil) # :nodoc:
|
613
|
+
if names
|
614
|
+
regexp_list = names.collect { |name| Kwartz::Util.pattern_to_regexp(name) }
|
615
|
+
handler._elem_info_table.each do |name, elem_info|
|
616
|
+
if regexp_list.any? { |regexp| regexp =~ name }
|
617
|
+
@elem_info_table[name] = elem_info
|
618
|
+
end
|
619
|
+
end
|
620
|
+
else
|
621
|
+
@elem_info_table.update(handler._elem_info_table)
|
622
|
+
end
|
469
623
|
end
|
470
624
|
|
471
625
|
|
472
626
|
protected
|
473
627
|
|
474
628
|
|
475
|
-
##
|
629
|
+
## (abstract) directive pattern, which is used to detect directives.
|
476
630
|
def directive_pattern
|
477
631
|
not_implemented
|
478
632
|
#return /\A(\w+):\s*(.*)/
|
479
633
|
end
|
480
634
|
|
481
635
|
|
482
|
-
##
|
636
|
+
## (abstract) mapping pattern, which is used to parse 'attr' directive.
|
483
637
|
def mapping_pattern
|
484
638
|
not_implemented
|
485
639
|
#return /\A'([-:\w]+)'\s+(.*)/
|
486
640
|
end
|
487
641
|
|
488
642
|
|
489
|
-
##
|
643
|
+
## (abstract) directive format, which is used at has_directive?() method
|
490
644
|
def directive_format
|
491
645
|
not_implemented
|
492
646
|
#return '%s: %s'
|
@@ -500,32 +654,35 @@ module Kwartz
|
|
500
654
|
##
|
501
655
|
## return true if directive name is one of 'stag', 'etag', 'elem', 'cont', and 'value',
|
502
656
|
## else return false.
|
503
|
-
def handle(
|
504
|
-
|
505
|
-
|
506
|
-
|
657
|
+
def handle(stmt_list, handler_arg)
|
658
|
+
arg = handler_arg
|
659
|
+
d_name = arg.directive_name
|
660
|
+
d_arg = arg.directive_arg
|
661
|
+
d_str = arg.directive_str
|
507
662
|
|
508
|
-
case
|
663
|
+
case d_name
|
509
664
|
|
510
665
|
when nil
|
511
|
-
assert unless !attr_info.empty? || !append_exprs.empty?
|
512
|
-
stmt_list <<
|
513
|
-
stmt_list.concat(cont_stmts)
|
514
|
-
stmt_list <<
|
666
|
+
assert unless !arg.attr_info.empty? || !arg.append_exprs.empty?
|
667
|
+
stmt_list << stag_stmt(arg)
|
668
|
+
stmt_list.concat(arg.cont_stmts)
|
669
|
+
stmt_list << etag_stmt(arg) if arg.etag_info # when empty-tag
|
515
670
|
|
516
671
|
when :dummy
|
517
672
|
# nothing
|
518
673
|
|
519
674
|
when :id, :mark
|
520
|
-
unless
|
521
|
-
raise convert_error("'#{d_str}': invalid marking name.", stag_info.linenum)
|
675
|
+
unless d_arg =~ /\A(\w+)\z/ || d_arg =~ /\A'(\w+)'\z/
|
676
|
+
raise convert_error("'#{d_str}': invalid marking name.", arg.stag_info.linenum)
|
522
677
|
end
|
523
678
|
name = $1
|
524
|
-
elem_info = ElementInfo.new(name, stag_info, etag_info, cont_stmts,
|
679
|
+
elem_info = ElementInfo.new(name, arg.stag_info, arg.etag_info, arg.cont_stmts,
|
680
|
+
arg.attr_info, arg.append_exprs)
|
525
681
|
if @elem_info_table[name]
|
526
682
|
#unless Config::ALLOW_DUPLICATE_ID
|
527
683
|
previous_linenum = @elem_info_table[name].stag_info.linenum
|
528
|
-
|
684
|
+
msg = "'#{d_str}': id '#{name}' is already used at line #{previous_linenum}."
|
685
|
+
raise convert_error(msg, arg.stag_info.linenum)
|
529
686
|
#end
|
530
687
|
else
|
531
688
|
@elem_info_table[name] = elem_info
|
@@ -534,47 +691,46 @@ module Kwartz
|
|
534
691
|
expand_element_info(elem_info, stmt_list)
|
535
692
|
|
536
693
|
when :stag, :Stag, :STAG
|
537
|
-
error_if_empty_tag(
|
694
|
+
error_if_empty_tag(arg)
|
538
695
|
flag_escape = d_name == :stag ? nil : (d_name == :Stag)
|
539
696
|
expr = NativeExpression.new(d_arg, flag_escape)
|
540
|
-
stmt_list << build_print_expr_stmt(expr, stag_info, nil)
|
541
|
-
stmt_list.concat(cont_stmts)
|
542
|
-
stmt_list <<
|
697
|
+
stmt_list << build_print_expr_stmt(expr, arg.stag_info, nil)
|
698
|
+
stmt_list.concat(arg.cont_stmts)
|
699
|
+
stmt_list << etag_stmt(arg)
|
543
700
|
|
544
701
|
when :etag, :Etag, :ETAG
|
545
|
-
error_if_empty_tag(
|
702
|
+
error_if_empty_tag(arg)
|
546
703
|
flag_escape = d_name == :etag ? nil : (d_name == :Etag)
|
547
704
|
expr = NativeExpression.new(d_arg, flag_escape)
|
548
|
-
stmt_list <<
|
549
|
-
stmt_list.concat(cont_stmts)
|
550
|
-
stmt_list << build_print_expr_stmt(expr, nil, etag_info)
|
705
|
+
stmt_list << stag_stmt(arg)
|
706
|
+
stmt_list.concat(arg.cont_stmts)
|
707
|
+
stmt_list << build_print_expr_stmt(expr, nil, arg.etag_info)
|
551
708
|
|
552
709
|
when :elem, :Elem, :ELEM
|
553
710
|
flag_escape = d_name == :elem ? nil : (d_name == :Elem)
|
554
711
|
expr = NativeExpression.new(d_arg, flag_escape)
|
555
|
-
stmt_list << build_print_expr_stmt(expr, stag_info, etag_info)
|
712
|
+
stmt_list << build_print_expr_stmt(expr, arg.stag_info, arg.etag_info)
|
556
713
|
|
557
714
|
when :cont, :Cont, :CONT, :value, :Value, :VALUE
|
558
|
-
error_if_empty_tag(
|
559
|
-
stag_info.tail_space = etag_info.head_space = nil # delete spaces
|
560
|
-
|
715
|
+
error_if_empty_tag(arg)
|
716
|
+
arg.stag_info.tail_space = arg.etag_info.head_space = nil # delete spaces
|
717
|
+
pargs = build_print_args(arg.stag_info, arg.attr_info, arg.append_exprs)
|
561
718
|
flag_escape = (d_name == :cont || d_name == :value) ? nil : (d_name == :Cont || d_name == :Value)
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
stmt_list << PrintStatement.new(args)
|
719
|
+
pargs << NativeExpression.new(d_arg, flag_escape)
|
720
|
+
pargs << arg.etag_info.tag_text if arg.etag_info.tagname
|
721
|
+
stmt_list << PrintStatement.new(pargs)
|
566
722
|
|
567
723
|
when :attr, :Attr, :ATTR
|
568
724
|
unless d_arg =~ self.mapping_pattern() # ex. /\A'([-:\w]+)'\s+(.*)\z/
|
569
|
-
raise convert_error("'#{d_str}': invalid attr pattern.", stag_info.linenum)
|
725
|
+
raise convert_error("'#{d_str}': invalid attr pattern.", arg.stag_info.linenum)
|
570
726
|
end
|
571
727
|
aname = $1; avalue = $2
|
572
728
|
flag_escape = d_name == :attr ? nil : (d_name == :Attr)
|
573
|
-
attr_info[aname] = NativeExpression.new(avalue, flag_escape)
|
729
|
+
arg.attr_info[aname] = NativeExpression.new(avalue, flag_escape)
|
574
730
|
|
575
731
|
when :append, :Append, :APPEND
|
576
732
|
flag_escape = d_name == :append ? nil : (d_name == :Append)
|
577
|
-
append_exprs << NativeExpression.new(d_arg, flag_escape)
|
733
|
+
arg.append_exprs << NativeExpression.new(d_arg, flag_escape)
|
578
734
|
|
579
735
|
when :replace_element_with_element, :replace_element_with_content,
|
580
736
|
:replace_content_with_element, :replace_content_with_content
|
@@ -583,15 +739,15 @@ module Kwartz
|
|
583
739
|
with_content = arr[3] == 'content'
|
584
740
|
name = d_arg
|
585
741
|
#
|
586
|
-
error_if_empty_tag(
|
587
|
-
stmt_list <<
|
742
|
+
error_if_empty_tag(arg) if replace_cont
|
743
|
+
stmt_list << stag_stmt(arg) if replace_cont
|
588
744
|
#stmt_list << ExpandStatement.new(:element, name)
|
589
745
|
elem_info = @elem_info_table[name]
|
590
746
|
unless elem_info
|
591
|
-
raise convert_error("'#{d_str}': element '#{name}' not found.", stag_info.linenum)
|
747
|
+
raise convert_error("'#{d_str}': element '#{name}' not found.", arg.stag_info.linenum)
|
592
748
|
end
|
593
749
|
expand_element_info(elem_info, stmt_list, with_content)
|
594
|
-
stmt_list <<
|
750
|
+
stmt_list << etag_stmt(arg) if replace_cont
|
595
751
|
|
596
752
|
when :replace_element_with, :replace_content_with, :replace, :placeholder
|
597
753
|
unless d_arg =~ /\A_?(element|content)\(["']?(\w+)["']?\)\z/
|
@@ -602,15 +758,17 @@ module Kwartz
|
|
602
758
|
replace_cont = d_name == :replace_content_with || d_name == :placeholder
|
603
759
|
with_content = kind == 'content'
|
604
760
|
#
|
605
|
-
error_if_empty_tag(
|
606
|
-
stmt_list <<
|
761
|
+
error_if_empty_tag(arg) if replace_cont
|
762
|
+
stmt_list << stag_stmt(arg) if replace_cont
|
607
763
|
#stmt_list << ExpandStatement.new(:element, name)
|
608
764
|
elem_info = @elem_info_table[name]
|
609
765
|
unless elem_info
|
610
|
-
|
766
|
+
msg = "'#{d_str}': element '#{name}' not found."
|
767
|
+
raise convert_error(msg, arg.stag_info.linenum)
|
611
768
|
end
|
612
769
|
expand_element_info(elem_info, stmt_list, with_content)
|
613
|
-
stmt_list <<
|
770
|
+
stmt_list << etag_stmt(arg) if replace_cont
|
771
|
+
|
614
772
|
else
|
615
773
|
return false
|
616
774
|
end #case
|
@@ -648,10 +806,11 @@ module Kwartz
|
|
648
806
|
|
649
807
|
|
650
808
|
##
|
651
|
-
##
|
809
|
+
## (abstract) covnert presentation data into list of Statement.
|
652
810
|
##
|
653
811
|
class Converter
|
654
812
|
include ConverterHelper
|
813
|
+
include StatementHelper
|
655
814
|
|
656
815
|
|
657
816
|
def initialize(handler, properties={})
|
@@ -662,7 +821,7 @@ module Kwartz
|
|
662
821
|
attr_reader :handler #, :dattr, :input
|
663
822
|
|
664
823
|
|
665
|
-
##
|
824
|
+
## (abstract) convert string into list of Statement.
|
666
825
|
def convert(input, filename='')
|
667
826
|
not_implemented
|
668
827
|
end
|
@@ -749,7 +908,7 @@ module Kwartz
|
|
749
908
|
taginfo = TagInfo.new(@scanner)
|
750
909
|
@linenum += (@linenum_delta + taginfo.prev_text.count("\n"))
|
751
910
|
@linenum_delta = taginfo.tag_text.count("\n")
|
752
|
-
taginfo.linenum = linenum
|
911
|
+
taginfo.linenum = @linenum
|
753
912
|
return taginfo
|
754
913
|
end
|
755
914
|
|
@@ -832,12 +991,14 @@ module Kwartz
|
|
832
991
|
d_arg = $2 || '' # directive arg
|
833
992
|
case d_name
|
834
993
|
when :attr, :Attr, :ATTR
|
835
|
-
|
836
|
-
|
994
|
+
handler_args = HandlerArgument.new(d_name, d_arg, d_str, stag_info, etag_info,
|
995
|
+
cont_stmts, attr_info, append_exprs)
|
996
|
+
@handler.handle(stmt_list, handler_args)
|
837
997
|
when :append, :Append, :APPEND
|
838
998
|
append_exprs ||= []
|
839
|
-
|
840
|
-
|
999
|
+
handler_args = HandlerArgument.new(d_name, d_arg, d_str, stag_info, etag_info,
|
1000
|
+
cont_stmts, attr_info, append_exprs)
|
1001
|
+
@handler.handle(stmt_list, handler_args)
|
841
1002
|
else
|
842
1003
|
if directive_name
|
843
1004
|
raise convert_error("'#{d_str}': not available with '#{directive_name}' directive.", stag_info.linenum)
|
@@ -854,8 +1015,10 @@ module Kwartz
|
|
854
1015
|
end
|
855
1016
|
|
856
1017
|
## handle other directives
|
857
|
-
|
858
|
-
|
1018
|
+
handler_args = HandlerArgument.new(directive_name, directive_arg, directive_str,
|
1019
|
+
stag_info, etag_info, cont_stmts,
|
1020
|
+
attr_info, append_exprs)
|
1021
|
+
ret = @handler.handle(stmt_list, handler_args)
|
859
1022
|
if directive_name && !ret
|
860
1023
|
raise convert_error("'#{directive_str}': unknown directive.", stag_info.linenum)
|
861
1024
|
end
|
@@ -865,8 +1028,8 @@ module Kwartz
|
|
865
1028
|
|
866
1029
|
## detect whether directive is exist or not
|
867
1030
|
def has_directive?(attr_info, taginfo)
|
868
|
-
##
|
869
|
-
val = attr_info[@dattr] # ex. @dattr == '
|
1031
|
+
## kw:d attribute
|
1032
|
+
val = attr_info[@dattr] # ex. @dattr == 'kw:d'
|
870
1033
|
if val && val.is_a?(String) && !val.empty?
|
871
1034
|
if val[0] == ?\ ;
|
872
1035
|
val[0,1] = '' # delete a space
|