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

ruleset in presentation logic file

Methods

Attributes

after  [RW] 
append  [RW] 
attrs  [RW] 
before  [RW] 
cont  [RW] 
elem  [RW] 
etag  [RW] 
logic  [RW] 
remove  [RW] 
selectors  [RW] 
stag  [RW] 
tagname  [RW] 

Public Class methods

[Source]

# File kwartz/node.rb, line 208
    def initialize(selectors)
      @selectors = selectors      # list of string ('#id', '.class', or 'tagname')
    end

Public Instance methods

[Source]

# File kwartz/node.rb, line 359
    def _inspect(indent=0)
      space = '  ' * indent
      sb = []
      sb << space <<   "- selectors: #{@selectors.inspect}\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
      #
      sb << space <<   "  before:\n" if @before
      @before.each do |stmt|
        sb << space << "    - " << stmt._inspect()
      end if @before
      #
      sb << space <<   "  after:\n" if @after
      @after.each do |stmt|
        sb << space << "    - " << stmt._inspect()
      end if @after
      #
      return sb.join
    end

[Source]

# File kwartz/node.rb, line 291
    def _parse_logic_str(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)
        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
      return stmt_list
    end

[Source]

# File kwartz/node.rb, line 328
    def duplicate()
      ruleset = dup()
      r = ruleset
      r.selectors = nil
      r.attrs  = @attrs.dup()  if @attrs
      r.append = @append.dup() if @append
      r.remove = @remove.dup() if @remove
      r.logic  = @logic.dup()  if @logic
      r.before = @before.dup() if @before
      r.after  = @after.dup()  if @after
      return r
    end

[Source]

# File kwartz/node.rb, line 342
    def merge(ruleset)
      r = ruleset
      r2 = duplicate()
      r2.stag  = r.stag  if r.stag
      r2.etag  = r.etag  if r.etag
      r2.cont  = r.cont  if r.cont
      (r2.attrs ||= {}).update(r.attrs) if r.attrs
      r2.append += r.append if r.append
      r2.remove += r.remove if r.remove
      r2.tagname = r.tagname if r.tagname
      r2.logic  = r.logic  if r.logic
      r2.before = r.before if r.before
      r2.after  = r.after  if r.after
      return r2
    end

[Source]

# File kwartz/node.rb, line 285
    def set_after(logic_str)
      stmt_list = _parse_logic_str(logic_str)
      @after = stmt_list
    end

[Source]

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

[Source]

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

[Source]

# File kwartz/node.rb, line 279
    def set_before(logic_str)
      stmt_list = _parse_logic_str(logic_str)
      @before = stmt_list
    end

[Source]

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

[Source]

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

[Source]

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

[Source]

# File kwartz/node.rb, line 273
    def set_logic(logic_str)
      stmt_list = _parse_logic_str(logic_str)
      @logic = stmt_list
    end

[Source]

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

[Source]

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

[Source]

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

[Source]

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

Protected Instance methods

[Source]

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

[Validate]