kwartz 3.0.0 → 3.1.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/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
|