Changeset 2534

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

r262@dhcp158 (orig r5): tasuku | 2007-09-05 19:42:15 +0900
smart_split no siyou wo kaeta !!!


Files:
1 modified

Legend:

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

    r2533 r2534  
    7272    $this->text = $text; 
    7373  } 
    74   function render($context) { 
     74  public function render($context) { 
    7575    return $this->text; 
    7676  } 
     
    7878 
    7979class GTVariableNode extends GTNode { 
     80  private $filter_expression; 
     81  function __construct($filter_expression) { 
     82    $this->filter_expression = $filter_expression; 
     83  } 
     84  public function render($context) { 
     85    return $filter_expression->resolve($context); 
     86  } 
    8087} 
    8188 
     
    132139    $this->format_string = $format_string; 
    133140  } 
    134   function render($context) { 
     141  public function render($context) { 
    135142    return date($this->format_string); 
    136143  } 
     
    138145 
    139146class GTUnknownNode extends GTNode { 
    140   function render($context) { 
     147  public function render($context) { 
    141148    return 'unknown...'; 
     149  } 
     150} 
     151 
     152class GTFilterExpression { 
     153  private $var; 
     154  private $filters; 
     155 
     156  function __construct($token) { 
     157    // $token = 'variable|default:"Default value"|date:"Y-m-d"' 
     158    // �äƤΤ����ä��顢 
     159    // $this->var = 'variable' 
     160    // $this->filters = 'array(array('default, 'Default value'), array('date', 'Y-m-d'))' 
     161    // �äƤ��롣 
     162    // Django�Τ��ǻϤޤä��餤���ʤ��餷���� 
     163    $fils = GTParser::smart_split($token, '|'); 
     164    $this->var = array_shift($fils); 
     165    foreach ($fils as $fil) { 
     166      $fils = GTParser::smart_split($fil, ':'); 
     167    } 
     168  } 
     169 
     170  // TODO: support ignore_failures 
     171  public function resolve($context) { 
     172 
    142173  } 
    143174} 
     
    164195  // "��ǥ������Ȥ��줿������ƥ��ڡ�������� // "���"'������ˤϡ�\"\'�Ȥ��롣 
    165196  // �ľ�����ɽ���ǽ񤱤Ф褫�ä������ޤ����ä��� 
    166   private function smart_split($text) { 
     197  // �ޥ��Х��ȥ����դʥǥ�������褦�˵��������� static public function smart_split($text, $delimiter = ' ') { 
    167198    $epos = strlen($text); 
    168199    $ret = array(); 
     
    200231          break; 
    201232        case "'": 
     233          $buf .= "'"; 
    202234          switch ($mode) { 
    203235            case 'd': 
    204               $buf .= "'"; 
    205236              break; 
    206237            case 'q': 
    207               array_push($ret, $buf); 
    208238              $mode = 'n'; 
    209               $buf = ''; 
    210239              break; 
    211240            default: 
    212               if ($buf != '') { 
    213                 array_push($ret, $buf); 
    214               } 
    215241              $mode = 'q'; 
    216               $buf = ''; 
    217242              break; 
    218243          } 
    219244          break; 
    220245        case '"': 
     246          $buf .= '"'; 
    221247          switch ($mode) { 
    222248            case 'd': 
    223               array_push($ret, $buf); 
    224249              $mode = 'n'; 
    225               $buf = ''; 
    226250              break; 
    227251            case 'q': 
    228               $buf .= '"'; 
    229252              break; 
    230253            default: 
    231               if ($buf != '') { 
    232                 array_push($ret, $buf); 
    233               } 
    234254              $mode = 'd'; 
    235               $buf = ''; 
    236               break; 
    237           } 
    238           break; 
    239         case ' ': 
     255              break; 
     256          } 
     257          break; 
     258        case $delimiter: 
    240259          switch ($mode) { 
    241260            case 'd': 
    242261            case 'q': 
    243               $buf .= ' '; 
     262              $buf .= $delimiter; 
    244263              break; 
    245264            default: 
     
    311330          return FALSE; 
    312331        } 
    313         $node = new GTNowNode($in[1]); 
     332        $param = explode('"', $in[1]); 
     333        if (count($param) != 3) { 
     334          $this->errorStr = 'now�ν����"�Ǥ����äƤ������'; 
     335          return FALSE; 
     336        } 
     337        $node = new GTNowNode($param[1]); 
    314338        break; 
    315339      default: 
     
    320344    return $node; 
    321345  } 
    322  
    323   // ��������˲ù� 
    324   // �: variable|filter1|filter2:"test"|filter3 
    325   // ��array('variable', array('filter1'), array(filter2, 'test'), array('filter3')) 
    326   // �������Ȥˡ� 
    327346 
    328347  // {{ }}�������� 
     
    332351      return FALSE; 
    333352    } 
    334     // TODO: use limit for explode 
    335     $in = explode(' ', trim(substr($this->template, $spos, $epos))); 
    336  
     353    $in = $this->smart_split(substr($this->template, $spos, $epos)); 
    337354    $spos = $epos + 2; 
    338355  } 
     
    401418    return $nl; 
    402419  } 
    403  
     420} 
     421 
     422class GunyaTemplate { 
    404423} 
    405424?>