Module: Kwartz::ElementExpander

Includes:
Assertion
Included in:
Handler
Defined in:
lib/kwartz/converter.rb

Overview

(abstract) expand ExpandStatement and ElementInfo

Handler class includes this module.

Instance Method Summary collapse

Methods included from Assertion

assert

Instance Method Details

#expand_element_info(elem_info, stmt_list, content_only = false) ⇒ Object

expand ElementInfo



446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
# File 'lib/kwartz/converter.rb', line 446

def expand_element_info(elem_info, stmt_list, content_only=false)
  #elem_ruleset = @ruleset_table[elem_info.name]
  elem_ruleset = get_element_ruleset(elem_info.name)
  if elem_ruleset && !elem_info.merged?
    elem_info.merge(elem_ruleset)
  end
  logic = content_only ? [ ExpandStatement.new(:cont, elem_info.name) ] : elem_info.logic
  logic.each do |stmt|
    expand_statement(stmt, stmt_list, elem_info)
  end
  #if content_only
  #  stmt = ExpandStatement.new(:cont, elem_info.name)
  #  expand_statement(stmt, stmt_list, elem_info)
  #else
  #  element.logic.each do |stmt|
  #    expand_statement(stmt, stmt_list, elem_info)
  #  end
  #end
end

#expand_statement(stmt, stmt_list, elem_info) ⇒ Object

expand ExpandStatement



468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
# File 'lib/kwartz/converter.rb', line 468

def expand_statement(stmt, stmt_list, elem_info)

  if stmt.is_a?(ExpandStatement)
    e = elem_info

    ## delete dummy '<span>' tag
    if @delspan && e.stag_info.tagname == 'span' && e.attr_info.empty? && e.append_exprs.nil?
      e.stag_info.tagname = e.etag_info.tagname = nil
    end

    case stmt.kind

    when :stag
      assert unless elem_info
      if e.stag_expr
        assert unless e.stag_expr.is_a?(NativeExpression)
        stmt_list << build_print_expr_stmt(e.stag_expr, e.stag_info, nil)
      else
        stmt_list << build_print_stmt(e.stag_info, e.attr_info, e.append_exprs)
      end

    when :etag
      assert unless elem_info
      if e.etag_expr
        assert unless e.etag_expr.is_a?(NativeExpression)
        stmt_list << build_print_expr_stmt(e.etag_expr, nil, e.etag_info)
      elsif e.etag_info    # e.etag_info is nil when <br>, <input>, <hr>, <img>, <meta>
        stmt_list << build_print_stmt(e.etag_info, nil, nil)
      end

    when :cont
      if e.cont_expr
        assert unless e.cont_expr.is_a?(NativeExpression)
        stmt_list << PrintStatement.new([e.cont_expr])
      else
        elem_info.cont_stmts.each do |cont_stmt|
          expand_statement(cont_stmt, stmt_list, nil)
        end
      end

    when :elem
      assert unless elem_info
      if e.elem_expr
        assert unless e.elem_expr.is_a?(NativeExpression)
        stmt_list << build_print_expr_stmt(e.elem_expr, e.stag_info, e.etag_info)
      else
        stmt.kind = :stag
        expand_statement(stmt, stmt_list, elem_info)
        stmt.kind = :cont
        expand_statement(stmt, stmt_list, elem_info)
        stmt.kind = :etag
        expand_statement(stmt, stmt_list, elem_info)
        stmt.kind = :elem
      end

    when :element, :content
      content_only = stmt.kind == :content
      #elem_info = @elements[stmt.name]
      elem_info = get_element_info(stmt.name)
      unless elem_info
        raise convert_error("element '#{stmt.name}' is not found.", nil)
      end
      expand_element_info(elem_info, stmt_list, content_only)

    else
      assert
    end #case
  else
    stmt_list << stmt
  end #if
end

#get_element_info(name) ⇒ Object

(abstract) get ElementInfo



440
441
442
# File 'lib/kwartz/converter.rb', line 440

def get_element_info(name)
  not_implemented
end

#get_element_ruleset(name) ⇒ Object

(abstract) get ElementRuleset



434
435
436
# File 'lib/kwartz/converter.rb', line 434

def get_element_ruleset(name)
  not_implemented
end