Class Kwartz::ElementRuleset
In: kwartz/node.rb
Parent: Ruleset

represents ‘name { … }’ entry in presentation logic file

Methods

Attributes

append  [RW] 
attrs  [RW] 
cont  [RW] 
elem  [RW] 
etag  [RW] 
logic  [RW] 
name  [RW] 
remove  [RW] 
stag  [RW] 
tagname  [RW] 
value  [RW] 

Public Class methods

[Source]

# File kwartz/node.rb, line 216
    def initialize(name)
      @name = name
    end

Public Instance methods

[Source]

# File kwartz/node.rb, line 326
    def _inspect(indent=0)
      space = '  ' * indent
      sb = []
      sb << space <<   "- name: #{@name}\n"
      #sb << space <<   "  value: #{@value == nil ? '' : @value}\n"
      sb << space <<   "  stag: #{@stag.code}\n" unless @stag.nil?
      sb << space <<   "  cont: #{@cont.code}\n" unless @cont.nil?
      sb << space <<   "  etag: #{@etag.code}\n" unless @etag.nil?
      sb << space <<   "  elem: #{@elem.code}\n" unless @elem.nil?
      #
      sb << space <<   "  attrs:\n" if @attrs
      @attrs.keys.sort.each do |key|
        val = @attrs[key]
        sb << space << "    - name:  #{key}\n"
        sb << space << "      value: #{val.code}\n"
      end if @attrs
      #
      sb << space <<   "  append:\n" if @append
      @append.each do |expr|
        sb << space << "    - #{expr.code}\n"
      end if @append
      #
      sb << space <<   "  remove:\n" if @remove
      @remove.each do |name|
        sb << space << "    - #{name}\n"
      end if @remove
      #
      sb << space <<   "  tagname: #{@tagname}\n" unless @tagname.nil?
      #
      sb << space <<   "  logic:\n" if @logic
      @logic.each do |stmt|
        sb << space << "    - " << stmt._inspect()
      end if @logic
      #
      return sb.join
    end

[Source]

# File kwartz/node.rb, line 315
    def duplicate(name)
      ruleset = dup()
      ruleset.name   = name
      ruleset.attrs  = @attrs.dup()  if @attrs
      ruleset.append = @append.dup() if @append
      ruleset.remove = @remove.dup() if @remove
      ruleset.logic  = @logic.dup()  if @logic
      return ruleset
    end

[Source]

# File kwartz/node.rb, line 259
    def set_append(list, escape_flag=nil)
      list.each do |expr_str|
        next if !expr_str || expr_str.empty?
        @append ||= []
        @append << NativeExpression.new(expr_str, escape_flag)
      end
    end

[Source]

# File kwartz/node.rb, line 250
    def set_attrs(hash, escape_flag=nil)
      hash.each do |name, expr_str|
        next if !expr_str || expr_str.empty?
        @attrs ||= {}
        @attrs[name] = NativeExpression.new(expr_str, escape_flag)
      end if hash
    end

[Source]

# File kwartz/node.rb, line 230
    def set_cont(str, escape_flag=nil)
      @cont = NativeExpression.new(str, escape_flag)
    end

[Source]

# File kwartz/node.rb, line 240
    def set_elem(str, escape_flag=nil)
      @elem = NativeExpression.new(str, escape_flag)
    end

[Source]

# File kwartz/node.rb, line 235
    def set_etag(str, escape_flag=nil)
      @etag = NativeExpression.new(str, escape_flag)
    end

[Source]

# File kwartz/node.rb, line 278
    def set_logic(logic_str)
      return unless logic_str
      stmt_list = []
      logic_str.each_line do |line|
        if line =~ /^\s*_(stag|cont|etag|elem)(?:\(\))?;?\s*(?:\#.*)?$/
          kind = $1
          stmt_list << ExpandStatement.new(kind.intern, @name)
        elsif line =~ /^\s*(_(element|content)([()'"\w\s]*));?\s*(?:\#.*)?$/
          str, kind, arg  = $1, $2, $3
          arg.strip!
          if arg =~ /\A\((.*)\)\z/ then arg = $1 end
          if arg.empty?
            raise parse_error("'#{str}': element name required.", nil)
          end
          case arg
          when /\A"(.*)"\z/  ;  name = $1
          when /\A'(.*)'\z/  ;  name = $1
          when /\A(\w+)\z/   ;  name = $1
          else
            raise parse_error("'#{str}': invalid pattern.", nil)
          end
          unless name =~ /\A\w+\z/
            raise parse_error("'#{name}': invalid #{kind} name.", nil)
          end
          stmt_list << ExpandStatement.new(kind.intern, name)
        #elsif line =~ /^\s*print(?:\s+(\S+)|\((.+)\))\s*;?\s*(?:\#.*)?$/
        elsif line =~ /^\s*print(?:\s+(.*?)|\((.+)\))\s*;?\s*$/
          arg = $1 || $2
          stmt_list << PrintStatement.new([NativeExpression.new(arg)])
        else
          stmt_list << NativeStatement.new(line.chomp, nil)
        end
      end
      @logic = stmt_list
    end

[Source]

# File kwartz/node.rb, line 268
    def set_remove(list)
      @remove = list if list
    end

[Source]

# File kwartz/node.rb, line 225
    def set_stag(str, escape_flag=nil)
      @stag = NativeExpression.new(str, escape_flag)
    end

[Source]

# File kwartz/node.rb, line 273
    def set_tagname(str)
      @tagname = str if str
    end

[Source]

# File kwartz/node.rb, line 245
    def set_value(str, escape_flag=nil)
      set_cont(str, escape_flag)
    end

Protected Instance methods

[Source]

# File kwartz/node.rb, line 367
    def parse_error(message, linenum)
      return ParseError.new(message, linenum, nil)
    end

[Validate]