<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); | |
/** | |
* CodeIgniter | |
* | |
* An open source application development framework for PHP 4.3.2 or newer | |
* | |
* @package CodeIgniter | |
* @author ExpressionEngine Dev Team | |
* @copyright Copyright (c) 2006, EllisLab, Inc. | |
* @license http://codeigniter.com/user_guide/license.html | |
* @link http://codeigniter.com | |
* @since Version 1.0 | |
* @filesource | |
*/ | |
// ------------------------------------------------------------------------ | |
/** | |
* Parser Class | |
* | |
* @package CodeIgniter | |
* @subpackage Libraries | |
* @category Parser | |
* @author ExpressionEngine Dev Team | |
* @link http://codeigniter.com/user_guide/libraries/parser.html | |
*/ | |
class CI_Parser { | |
var $l_delim = '{'; | |
var $r_delim = '}'; | |
var $object; | |
/** | |
* Parse a template | |
* | |
* Parses pseudo-variables contained in the specified template, | |
* replacing them with the data in the second param | |
* | |
* @access public | |
* @param string | |
* @param array | |
* @param bool | |
* @return string | |
*/ | |
function parse($template, $data, $return = FALSE) | |
{ | |
$CI =& get_instance(); | |
$template = $CI->load->view($template, $data, TRUE); | |
if ($template == '') | |
{ | |
return FALSE; | |
} | |
foreach ($data as $key => $val) | |
{ | |
if (is_array($val)) | |
{ | |
$template = $this->_parse_pair($key, $val, $template); | |
} | |
else | |
{ | |
$template = $this->_parse_single($key, (string)$val, $template); | |
} | |
} | |
if ($return == FALSE) | |
{ | |
$CI->output->final_output = $template; | |
} | |
return $template; | |
} | |
// -------------------------------------------------------------------- | |
/** | |
* Set the left/right variable delimiters | |
* | |
* @access public | |
* @param string | |
* @param string | |
* @return void | |
*/ | |
function set_delimiters($l = '{', $r = '}') | |
{ | |
$this->l_delim = $l; | |
$this->r_delim = $r; | |
} | |
// -------------------------------------------------------------------- | |
/** | |
* Parse a single key/value | |
* | |
* @access private | |
* @param string | |
* @param string | |
* @param string | |
* @return string | |
*/ | |
function _parse_single($key, $val, $string) | |
{ | |
return str_replace($this->l_delim.$key.$this->r_delim, $val, $string); | |
} | |
// -------------------------------------------------------------------- | |
/** | |
* Parse a tag pair | |
* | |
* Parses tag pairs: {some_tag} string... {/some_tag} | |
* | |
* @access private | |
* @param string | |
* @param array | |
* @param string | |
* @return string | |
*/ | |
function _parse_pair($variable, $data, $string) | |
{ | |
if (FALSE === ($match = $this->_match_pair($string, $variable))) | |
{ | |
return $string; | |
} | |
$str = ''; | |
foreach ($data as $row) | |
{ | |
$temp = $match['1']; | |
foreach ($row as $key => $val) | |
{ | |
if (! is_array($val)) | |
{ | |
$temp = $this->_parse_single($key, $val, $temp); | |
} | |
else | |
{ | |
$temp = $this->_parse_pair($key, $val, $temp); | |
} | |
} | |
$str .= $temp; | |
} | |
return str_replace($match['0'], $str, $string); | |
} | |
// -------------------------------------------------------------------- | |
/** | |
* Matches a variable pair | |
* | |
* @access private | |
* @param string | |
* @param string | |
* @return mixed | |
*/ | |
function _match_pair($string, $variable) | |
{ | |
if (! preg_match("|".$this->l_delim . $variable . $this->r_delim."(.+)".$this->l_delim . '/' . $variable . $this->r_delim."|s", $string, $match)) | |
{ | |
return FALSE; | |
} | |
return $match; | |
} | |
} | |
// END Parser Class |