Changeset 2549

Show
Ignore:
Timestamp:
12/06/07 13:17:01 (5 years ago)
Author:
tasuku
Message:

r277@dhcp158 (orig r20): tasuku | 2007-09-07 14:17:22 +0900
filter block dekita


Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/php/mumu/trunk/GunyaTemplate.php

    r2548 r2549  
    4141// block.super         : �ƥƥ�졼�Ȥ�lock��������������ä��������� 
    4242 
     43// �� 
     44// find_endtags�ϸ��Ĥ����parse�⤷�ơ�$sposư�����Ƥ⤤���󤸤����� 
     45 
    4346class GTContext { 
    4447  // �ƥ�졼�Ȥ��Ϥ���ξ�����饹 
     
    9194    array_shift($this->dicts); 
    9295  } 
     96  function update($other_array) { 
     97    array_unshift($this->dicts, $other_array); 
     98  } 
    9399} 
    94100 
     
    264270 
    265271class GTFilterNode extends GTNode { 
     272  private $filter_expr; 
     273  private $nodelist; 
     274  function __construct($filter_expr, $nodelist) { 
     275    $this->filter_expr = $filter_expr; 
     276    $this->nodelist = $nodelist; 
     277  } 
     278  function _render($context) { 
     279    $output = $this->nodelist->_render($context); 
     280    $context->update(array('var' => $output)); 
     281    $filtered = $this->filter_expr->resolve($context); 
     282    $context->pop(); 
     283    return $filtered; 
     284  } 
    266285} 
    267286 
     
    308327    } 
    309328    $context->pop(); 
    310     var_dump($rnodelist); 
    311329    return implode('', $rnodelist); 
    312330  } 
     
    735753        $spos = $lpos + 2; 
    736754        break; 
    737       case 'filter': 
    738         // TODO: implement 
    739         $spos = $lpos + 2; 
     755      case 'filter': // endfilter 
     756        if (count($in) != 2) { 
     757          $this->errorStr = 'filter�Υѥ���������������; 
     758          return FALSE; 
     759        } 
     760        $lpos += 2; 
     761        if ((list($bepos, $blpos) = $this->find_endtags($lpos, $epos, array('endfilter'))) === FALSE) { 
     762          return FALSE; 
     763        } 
     764        $filter_expr = new GTFilterExpression('var|'. $in[1]); 
     765        $nodelist = $this->_parse($lpos, $bepos); 
     766        $node = new GTFilterNode($filter_expr, $nodelist); 
     767        $spos = $blpos; 
    740768        break; 
    741769      default: