| <?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
|
| |
| /* End of file Parser.php */ |
| /* Location: ./system/libraries/Parser.php */ |