Take two:
[www-register-wizard.git] / libraries / Parser.php
1 <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');\r
2 /**\r
3  * CodeIgniter\r
4  *\r
5  * An open source application development framework for PHP 4.3.2 or newer\r
6  *\r
7  * @package             CodeIgniter\r
8  * @author              ExpressionEngine Dev Team\r
9  * @copyright   Copyright (c) 2008, EllisLab, Inc.\r
10  * @license             http://codeigniter.com/user_guide/license.html\r
11  * @link                http://codeigniter.com\r
12  * @since               Version 1.0\r
13  * @filesource\r
14  */\r
15 \r
16 // ------------------------------------------------------------------------\r
17 \r
18 /**\r
19  * Parser Class\r
20  *\r
21  * @package             CodeIgniter\r
22  * @subpackage  Libraries\r
23  * @category    Parser\r
24  * @author              ExpressionEngine Dev Team\r
25  * @link                http://codeigniter.com/user_guide/libraries/parser.html\r
26  */\r
27 class CI_Parser {\r
28 \r
29         var $l_delim = '{';\r
30         var $r_delim = '}';\r
31         var $object;\r
32                 \r
33         /**\r
34          *  Parse a template\r
35          *\r
36          * Parses pseudo-variables contained in the specified template,\r
37          * replacing them with the data in the second param\r
38          *\r
39          * @access      public\r
40          * @param       string\r
41          * @param       array\r
42          * @param       bool\r
43          * @return      string\r
44          */\r
45         function parse($template, $data, $return = FALSE)\r
46         {\r
47                 $CI =& get_instance();\r
48                 $template = $CI->load->view($template, $data, TRUE);\r
49                 \r
50                 if ($template == '')\r
51                 {\r
52                         return FALSE;\r
53                 }\r
54                 \r
55                 foreach ($data as $key => $val)\r
56                 {\r
57                         if (is_array($val))\r
58                         {\r
59                                 $template = $this->_parse_pair($key, $val, $template);          \r
60                         }\r
61                         else\r
62                         {\r
63                                 $template = $this->_parse_single($key, (string)$val, $template);\r
64                         }\r
65                 }\r
66                 \r
67                 if ($return == FALSE)\r
68                 {\r
69                         $CI->output->append_output($template);\r
70                 }\r
71                 \r
72                 return $template;\r
73         }\r
74         \r
75         // --------------------------------------------------------------------\r
76         \r
77         /**\r
78          *  Set the left/right variable delimiters\r
79          *\r
80          * @access      public\r
81          * @param       string\r
82          * @param       string\r
83          * @return      void\r
84          */\r
85         function set_delimiters($l = '{', $r = '}')\r
86         {\r
87                 $this->l_delim = $l;\r
88                 $this->r_delim = $r;\r
89         }\r
90         \r
91         // --------------------------------------------------------------------\r
92         \r
93         /**\r
94          *  Parse a single key/value\r
95          *\r
96          * @access      private\r
97          * @param       string\r
98          * @param       string\r
99          * @param       string\r
100          * @return      string\r
101          */\r
102         function _parse_single($key, $val, $string)\r
103         {\r
104                 return str_replace($this->l_delim.$key.$this->r_delim, $val, $string);\r
105         }\r
106         \r
107         // --------------------------------------------------------------------\r
108         \r
109         /**\r
110          *  Parse a tag pair\r
111          *\r
112          * Parses tag pairs:  {some_tag} string... {/some_tag}\r
113          *\r
114          * @access      private\r
115          * @param       string\r
116          * @param       array\r
117          * @param       string\r
118          * @return      string\r
119          */\r
120         function _parse_pair($variable, $data, $string)\r
121         {       \r
122                 if (FALSE === ($match = $this->_match_pair($string, $variable)))\r
123                 {\r
124                         return $string;\r
125                 }\r
126 \r
127                 $str = '';\r
128                 foreach ($data as $row)\r
129                 {\r
130                         $temp = $match['1'];\r
131                         foreach ($row as $key => $val)\r
132                         {\r
133                                 if ( ! is_array($val))\r
134                                 {\r
135                                         $temp = $this->_parse_single($key, $val, $temp);\r
136                                 }\r
137                                 else\r
138                                 {\r
139                                         $temp = $this->_parse_pair($key, $val, $temp);\r
140                                 }\r
141                         }\r
142                         \r
143                         $str .= $temp;\r
144                 }\r
145                 \r
146                 return str_replace($match['0'], $str, $string);\r
147         }\r
148         \r
149         // --------------------------------------------------------------------\r
150         \r
151         /**\r
152          *  Matches a variable pair\r
153          *\r
154          * @access      private\r
155          * @param       string\r
156          * @param       string\r
157          * @return      mixed\r
158          */\r
159         function _match_pair($string, $variable)\r
160         {\r
161                 if ( ! preg_match("|".$this->l_delim . $variable . $this->r_delim."(.+?)".$this->l_delim . '/' . $variable . $this->r_delim."|s", $string, $match))\r
162                 {\r
163                         return FALSE;\r
164                 }\r
165                 \r
166                 return $match;\r
167         }\r
168 \r
169 }\r
170 // END Parser Class\r
171 \r
172 /* End of file Parser.php */\r
173 /* Location: ./system/libraries/Parser.php */