public function __construct()
 {
     $this->ci =& get_instance();
     if (!is_array(self::$parser_config)) {
         if ($this->ci->config->load('parser_lex', TRUE, TRUE)) {
             self::$parser_config = $this->ci->config->item('parser_lex');
             if (!is_array(self::$parser_config)) {
                 self::$parser_config = array();
             }
         } else {
             self::$parser_config = array();
         }
     }
     $this->parser_options['scope_glue'] = $this->scopeGlue;
     $this->parser_options['cumulative_noparse'] = $this->cumulativeNoparse;
     $this->parser_options['allow_php'] = false;
 }
 public function set_extension_data($content, $attributes)
 {
     $content and $this->parsed_content = $content;
     $parse_content = false;
     switch ($this->extension_class) {
         case 'html':
             $parse_content = true;
             break;
     }
     if ($attributes) {
         $set = false;
         // Check for parsing the tag's content..
         // Parsing is enabled by default, it could be disabled
         // using a special parameter for that.
         foreach (array('parse_content', 'parse-content') as $attr) {
             if (isset($attributes[$attr]) && !$set) {
                 $parse_content = str_to_bool($attributes[$attr]);
                 $set = true;
             }
             if (isset($attributes[$attr])) {
                 unset($attributes[$attr]);
             }
         }
     }
     if (empty($content) || is_scalar($content) && trim($content) == '') {
         $parse_content = true;
     }
     if (!$parse_content) {
         $this->parse_tag_content = false;
     }
     if ($parse_content && is_scalar($this->parsed_content) && $this->parsed_content != '') {
         $parser = new Parser_Lex_Extensions();
         $parser->scopeGlue($this->parser_instance->parser_options['scope_glue']);
         $parser->cumulativeNoparse($this->parser_instance->parser_options['cumulative_noparse']);
         $this->parsed_content = $parser->parse($this->parsed_content, $this->parser_instance->parser_data, array($this->parser_instance, 'parser_callback'), $this->parser_instance->parser_options['allow_php']);
         unset($parser);
     }
     if ($attributes) {
         $parse_params = true;
         $set = false;
         // Check for additional parsing of the parameters.
         // Additional parsing is enabled by default, it could be disabled
         // using a special parameter for that.
         foreach (array('parse_params', 'parse-params') as $attr) {
             if (isset($attributes[$attr]) && !$set) {
                 $parse_params = str_to_bool($attributes[$attr]);
                 $set = true;
             }
             if (isset($attributes[$attr])) {
                 unset($attributes[$attr]);
             }
         }
         $no_value = new Parser_Lex_No_Value();
         foreach ($attributes as $key => $attr) {
             if (is_string($attr)) {
                 if ($this->parser_instance->is_serialized(trim($attr), $value)) {
                     $attributes[$key] = $value;
                 } elseif (preg_match('/^\\s*\\[\\[(.*)\\]\\]\\s*$/ms', $attr, $matches) && ($value = $this->parser_instance->getVariable(trim($matches[1]), $this->parser_instance->parser_data, $no_value)) !== $no_value) {
                     $attributes[$key] = $value;
                 } elseif ($parse_params && strpos($attr, '[[') !== false && strpos($attr, ']]') !== false) {
                     $a = trim(str_replace(array('[[', ']]'), array('{{', '}}'), $attr));
                     $parser = new Parser_Lex_Extensions();
                     $parser->is_attribute_being_parsed = true;
                     $parser->scopeGlue($this->parser_instance->parser_options['scope_glue']);
                     $parser->cumulativeNoparse($this->parser_instance->parser_options['cumulative_noparse']);
                     $value = $parser->parse($a, $this->parser_instance->parser_data, array($this->parser_instance, 'parser_callback'), $this->parser_instance->parser_options['allow_php']);
                     unset($parser);
                     $attributes[$key] = $this->parser_instance->is_serialized(trim($value), $result) ? $result : $value;
                 }
             }
         }
     }
     $this->parsed_attributes = $attributes;
 }
 public function parse_string($template, $data = array(), $return = FALSE, $options = array())
 {
     if (!is_array($options)) {
         $options = array();
     }
     $options = array_merge($this->config, $options);
     $options['cumulative_noparse'] = !empty($options['cumulative_noparse']);
     if (is_object($data)) {
         $data = get_object_vars($data);
     }
     if (!is_array($data)) {
         if (empty($data)) {
             $data = array();
         } else {
             $data = (array) $data;
         }
     }
     $ci = $this->ci;
     $is_mx = false;
     if (!$return) {
         list($ci, $is_mx) = $this->detect_mx();
     }
     $parser = new Parser_Lex_Extensions();
     $parser->scopeGlue($options['scope_glue']);
     $parser->cumulativeNoparse($options['cumulative_noparse']);
     $data = array_merge($data, $ci->load->_ci_cached_vars);
     $parser->parser_options = $options;
     $template = $parser->parse($template, $data, array($parser, 'parser_callback'), $options['allow_php']);
     if ($options['cumulative_noparse']) {
         $template = Parser_Lex_Extensions::injectNoparse($template);
     }
     return $this->output($template, $return, $ci, $is_mx);
 }
 /**
  * extend
  *
  * Usage:
  * {{ layout:extend file='layouts/base-layout.html' }}
  *     {{ layout:content name='body' }}
  *         my body
  *     {{ /layout:content }}
  * {{ /layout:extend }}
  *
  * @return string
  */
 public function extend($name = 'extend')
 {
     $base_layout = $this->get_attribute('file', NULL);
     $string = '';
     $path = $this->load->get_var('template_views');
     $path = $path . $base_layout;
     if ($path != '') {
         $string = @(string) file_get_contents($path);
     }
     $content = $this->get_content();
     $content = is_string($content) ? $content : '';
     $parser = new Parser_Lex_Extensions();
     $parser->scopeGlue($this->parser_instance->parser_options['scope_glue']);
     $parser->cumulativeNoparse($this->parser_instance->parser_options['cumulative_noparse']);
     $parser->parser_options = $this->parser_instance->parser_options;
     $parser->parse($content, $this->parser_instance->parser_data, array($this->parser_instance, 'parser_callback'), $this->parser_instance->parser_options['allow_php']);
     $result = $parser->parse($string, $this->parser_instance->parser_data, array($this->parser_instance, 'parser_callback'), $this->parser_instance->parser_options['allow_php']);
     return $result;
 }