Changeset 617

Show
Ignore:
Timestamp:
2007-06-07 17:23:44 (2 years ago)
Author:
gaspard
Message:

[changed] parser: template inclusion was buggy.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/parser/lib/parser.rb

    r604 r617  
    4646 
    4747class Parser 
    48   attr_accessor :text, :method, :pass, :options, :blocks, :params 
     48  attr_accessor :text, :method, :pass, :options, :blocks, :params, :name 
    4949     
    5050  class << self 
     
    9393    @options.delete(:mode) 
    9494     
     95     
    9596    if opts[:sub] 
    9697      @text = text 
     
    100101     
    101102    start(mode) 
     103     
     104    # set name 
     105    @name = @params[:name] if @params 
    102106     
    103107    unless opts[:sub] 
     
    178182   
    179183  def before_render 
    180     # name param is propagated into children (used to label parts of a large template) 
    181     if @params && (name = @params[:name]) 
    182       if @context[:name] 
    183         @context[:name] += "/#{name}" 
    184       else 
    185         @context[:name] = name 
    186       end 
    187       if replacer = (@context[:parts] || {})[@context[:name]] 
    188         return false if replacer.empty? 
    189         replace_with(replacer) 
    190         @params[:name] = name # in case replaced again 
    191       end 
    192     end 
    193184    true 
    194185  end 
     
    207198   
    208199  def include_template 
     200    if @options[:part] && @options[:part] == @params[:part] 
     201      # fetching only a part, do not open this element (same as original caller) as it is useless and will make use loop the loop. 
     202      @method = 'ignore' 
     203      enter(:void) 
     204      return 
     205    end 
    209206    @method = 'void' 
    210207    text    = @text 
     
    216213     
    217214    absolute_url += "::#{@params[:part].gsub('/','_')}" if @params[:part] 
     215    absolute_url += "??#{@options[:part].gsub('/','_')}" if @options[:part] 
    218216    if absolute_url 
    219217      if @options[:included_history].include?(absolute_url) 
     
    226224     
    227225    @text = before_parse(@text) 
    228     enter(:void) # scan fetched text 
    229226    if @params[:part] 
     227      part_bak = @options[:part] 
     228      @options[:part] = @params[:part] 
     229      enter(:void) # scan fetched text 
     230      @options[:part] = part_bak 
    230231      included_blocks = [find_part(@blocks, @params[:part])] 
    231232    else 
     233      enter(:void) # scan fetched text 
    232234      included_blocks = @blocks 
    233235    end 
    234      
    235236    @blocks = [] 
    236237    @text   = text 
    237238    enter(:void) # normal scan on content 
    238      
    239239    # replace 'with' 
    240240    @blocks.each do |b| 
     
    274274    blocks.each do |b| 
    275275      next if b.kind_of?(String) 
    276       return b if b.params[:name] == name 
    277       next if b.params[:name] # bad name 
     276      return b if b.name == name 
     277      next if b.name # bad name 
    278278      if res = find_name(b.blocks,name) 
    279279        return res 
  • trunk/lib/parser/lib/rules/zazen.rb

    r615 r617  
    9797        if id =~ /(.*?)#(.*)/ 
    9898          id, sharp = *id.split('#') 
    99           sharp = title if sharp.blank? 
     99          sharp = title if sharp.nil? || sharp == '' 
    100100        end 
    101101        store @helper.make_link(:title=>title,:id=>id,:sharp=>sharp) 
  • trunk/lib/parser/lib/rules/zena.rb

    r616 r617  
    300300     
    301301    def r_inspect 
    302       ["params: #{@params.inspect}",  
     302      out ["params: #{@params.inspect}",  
    303303      "name:   #{@context[:name]}", 
    304304      "node:   #{node}", 
  • trunk/lib/parser/test/parser_test.rb

    r615 r617  
    5656  testfile :zafu, :zafu_asset, :zafu_insight, :zazen 
    5757  def test_single 
    58     do_test('zazen', 'link_sharp_attribute') 
     58    do_test('zafu', 'default_tag') 
    5959  end 
    6060   
  • trunk/lib/parser/test/zafu.yml

    r599 r617  
    104104named_parts: 
    105105  src: "named_parts: <r:void><r:void name='lala'>lala</r:void> <r:test name='start'>start from here to <r:hello name='sub'>sub</r:hello></r:test></r:void> ok." 
    106   res: "named_parts: lala [test {= :name=>'start'} {> :name=>'start'}]start from here to [hello {= :name=>'sub'}]sub[/hello][/test] ok." 
     106  res: "named_parts: lala [test {= :name=>'start'}]start from here to [hello {= :name=>'sub'}]sub[/hello][/test] ok." 
    107107 
    108108include_part: 
     
    113113  src: "IS: I like <r:void name='sub'>sub <r:hello/></r:void> and <r:include template='/include/self' part='sub'/>" 
    114114  res: "IS: I like sub hello world! and sub hello world!" 
     115 
     116a_b_c: 
     117  src: "<r:void name='a'>A<r:void name='b'>B<r:void name='c'>C</r:void></r:void></r:void>" 
     118  res: "ABC" 
     119 
     120include_self_included: 
     121  src: "<r:include template='/a/b/c'><r:with part='a/b'>X<r:include template='/include/self/included' part='a/b/y'/> and <r:void name='y'>Y</r:void></r:with></r:include>" 
     122  res: "AXY and Y" 
    115123 
    116124include_bad_part: 
     
    279287    [/test]ok 
    280288 
    281 names: 
    282   src: "<p do='void' name='root'><p do='inspect' name='first'/><p do='inspect' name='second'/></p>" 
    283   res: "<p>[inspect {= :name=>'first'} {> :name=>'root/first'}]<p/>[/inspect][inspect {= :name=>'second'} {> :name=>'root/second'}]<p/>[/inspect]</p>" 
    284289 
    285290default_tag: 
  • trunk/lib/parser/test/zazen.yml

    r615 r617  
    132132  res: "<p>[make_link id:|23| sharp:|hello| title:|hello|] I love you</p>" 
    133133 
    134 link_sharp_attribute: 
    135   src: '"hello":23#[name] I love you' 
    136   res: "<p>[make_link id:|23| sharp:|[name]| title:|hello|] I love you</p>" 
    137  
    138134wiki_link: 
    139135  src: "why use ?ruby? ?"