DEFAULT_COMMAND |
= |
{ :select => true, :template => true, :element => true, :attribute => true, :expand => true, :include => true, :copy_of => true, :value_of => true, :each => true, :property => true, :invoke => true, :@id => true, :@each => true, :@type => true, } |
EXPAND_CODE |
= |
%q` def expand(data, pdata, rdata, plugin) if( @alt && plugin._alt_exist?(@alt) ) @parent.children.delete(self) end if( @data_path ) case data when Hash val = value_by_path2(@data_path, data, pdata, rdata, plugin) case val when Array nodes = val.collect{|v| node = deep_dup() node.parent = self case v when Hash node.expand_with_hash(v, pdata, rdata, plugin) else node.add_child(v) end node.expand_attr(v) node } @name = nil @attrs = [] @children = nodes #@data_path = nil when Hash expand_attr(val) expand_with_hash(val, pdata, rdata, plugin) else expand_attr(val) add_child(val) end if( @expand ) @name = nil @attrs = [] case val when Hash val.clear() val[TextNode] = self.to_s() if( @expand == :strip ) val[TextNode] = val[TextNode].strip() end when Array for i in 0..(val.size-1) s = @children[i].to_s() if( @expand == :strip ) s = s.strip() end case val[i] when Hash val[i].clear() val[i][TextNode] = s when String val[i][0..-1] = @children[i].to_s() end end when String s = self.to_s() if( @expand == :strip ) s = s.strip() end val[0..-1] = s end @children = [] end end else expand_attr(data) expand_children(data, pdata, rdata, plugin) end # expand <xx:attribute ..> after expanding children. if( @exattr ) val = to_s() @children = [] node = self while( node = node.parent ) if( node.name ) break end end node.add_attr(@exattr) node.add_attrval(val) @exattr = nil end end ` |
|
(1)current data (2)parent data (3)root data (4)plugin object
|